【问题标题】:Is it possible to invoke NSDictionary's valueForKeyPath: when a key contains periods?是否可以调用 NSDictionary 的 valueForKeyPath: 当键包含句点时?
【发布时间】:2011-02-19 09:32:24
【问题描述】:

我正在尝试获取 com.apple.scheduler plist 中 repeatInterval 键的值。我想像这样使用 NSDictionary 的 valueForKeyPath: 方法:

CFPropertyListRef value;
value = CFPreferencesCopyValue(CFSTR("AbsoluteSchedule"),
                               CFSTR("com.apple.scheduler"),
                               kCFPreferencesCurrentUser,
                               kCFPreferencesCurrentHost);
NSNumber *repeatInterval = [(NSDictionary *)value valueForKeyPath:@"com.apple.SoftwareUpdate.SUCheckSchedulerTag.Timer.repeatInterval"];

但是这样做的问题是第一个键实际上是“com.apple.SoftwareUpdate”,而不仅仅是“com”。我可以通过分别获取第一个值来解决这个问题:

NSDictionary *dict = [(NSDictionary *)value valueForKey:@"com.apple.SoftwareUpdate"];
NSNumber *repeatInterval = [dict valueForKeyPath:@"SUCheckSchedulerTag.Timer.repeatInterval"];

我只是想知道是否有办法在 keypath 中转义句点,这样我就可以消除这个额外的步骤。

【问题讨论】:

    标签: objective-c cocoa macos foundation


    【解决方案1】:

    NSDictionary 没有 valueforKeyPath: 方法。它只是调用 NSObject 实现,这是您问题的根源。

    也许你可以用你自己的转义字符在 NSDictionary 上的一个类别中重新实现它。

    【讨论】:

    • 我不认为我会经常遇到这个问题来证明为它编写一个类别是合理的,所以我现在只坚持额外的代码行。感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多