Objective c NSUserDefault已注册默认值在NSMenuItem绑定中的初始显示

Objective c NSUserDefault已注册默认值在NSMenuItem绑定中的初始显示,objective-c,macos,cocoa,nsuserdefaults,cocoa-bindings,Objective C,Macos,Cocoa,Nsuserdefaults,Cocoa Bindings,要使绑定到NSUserDefault键的NSMenuItem显示注册的默认值,您需要执行的操作顺序是什么 我正在注册默认值,但我的NSMenuItems没有显示我在启动应用程序时注册的默认值。我花了一上午的大部分时间来研究这个问题,大部分答案似乎都是零碎的,所以我想我会与大家分享 1) 将菜单项绑定到: 共享用户默认值 控制器键:值 型号密钥路径:keyName(在本例中为重复数据消除\u目标) 2) 在调用awakeFromNib之前注册您的默认值,我在AppDelegate中的+(voi

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


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

我花了一上午的大部分时间来研究这个问题,大部分答案似乎都是零碎的,所以我想我会与大家分享

1) 将菜单项绑定到:

  • 共享用户默认值
  • 控制器键:值
  • 型号密钥路径:keyName(在本例中为重复数据消除\u目标)
2) 在调用awakeFromNib之前注册您的默认值,我在AppDelegate中的+(void)initialize方法中进行了注册。(ApplicationIDFinishLaunching,(id)init,applicationWillFinishLaunching,这些都不起作用)

3) 使用布尔值的NSNumbers初始化默认字典,尽管有示例显示它们已初始化为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];
}
这为我解决了问题


仅供参考:

感谢您没有用Xcode标记此问题+1就是为了这个。我已经使用SO 5个月了,但直到最近才加入,所以我有点知道发生了什么事。然后你可能知道,对于初学者将Xcode与编译器、Objective-C与Cocoa等混为一谈,我是多么挑剔……;-)
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];
}