2

为了使绑定到 NSUserDefault 键的 NSMenuItem(s) 显示注册的默认值,您需要执行的操作顺序是什么?

我正在注册默认值,但我的 NSMenuItems 没有显示我在启动应用程序时注册的默认值。

4

1 回答 1

2

我花了大部分上午的时间来追查这个问题,而那里的大多数答案似乎都是零碎的,所以我想分享一下。

1)将您的菜单项绑定到:

  • 共享用户默认值
  • 控制器键:值
  • 模型密钥路径:keyName(在本例中为 Deduplication_Target)

2) 在调用 awakeFromNib 之前注册您的默认值,我在 AppDelegate 的 + (void)initialize 方法中完成了它。(applicationDidFinishLaunching、(id)init、applicationWillFinishLaunching,这些都不起作用)

+ (void)initialize {
    [self setupDefaults];
}

3)使用 NSNumbers 为 BOOL 值初始化您的默认字典,尽管那里的示例显示它们已初始化为 NSStrings:

NSString *const KEY_DEDUPLICATION_TARGET = @"Deduplication_Target";
NSString *const KEY_DEDUPLICATION_SOURCE = @"Deduplication_Source";
+ (void)setupDefaults {    
    NSDictionary* userDefaultsValuesDict = [NSDictionary dictionaryWithObjectsAndKeys: 
                                           [NSNumber numberWithBool:YES], KEY_DEDUPLICATION_TARGET, 
                                            [NSNumber numberWithBool:YES], KEY_DEDUPLICATION_SOURCE, 
                                            nil];

    // set them in the standard user defaults
    [[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict];
}

这为我解决了它。

供参考:https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaBindings/Concepts/NSUserDefaultsController.html

于 2012-10-18T17:39:39.153 回答