NSUserDefault Registered默认初始显示在NSMenuItem绑定中

时间:2012-10-16 19:33:45

标签: objective-c macos cocoa nsuserdefaults cocoa-bindings

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

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

1 个答案:

答案 0 :(得分: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