【发布时间】:2011-02-25 05:24:31
【问题描述】:
我的主菜单 (MainMenu.xib) 中有一个名为“Word Wrap”的 NSMenuItem。它的值绑定到我的共享用户默认控制器,也在 XIB 中实例化。选择时它还会发送以下操作:
- (IBAction)toggleWordWrap:(id)sender {
NSUserDefaultsController *ctrlr = [NSUserDefaultsController sharedUserDefaultsController];
if ([[[ctrlr values] valueForKey:@"wordWrapIsEnabled"] boolValue]) {
// turn on word wrap
} else {
// turn off word wrap
}
}
在我的应用代理的 +initialize 方法中,我使用默认值填充标准用户默认值:
+ (void)initializeDefaults {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], @"wordWrapIsEnabled",
// etc.
nil];
NSUserDefaultsController *ctrlr = [NSUserDefaultsController sharedUserDefaultsController];
[ctrlr setInitialValues:defaults];
}
我的问题是我的 NSMenuItem 的状态与我的用户默认设置不同步。以下是发生的时间线:
应用发布:
- Word Wrap 菜单项未选中
-
wordWrapIsEnabled否 - 自动换行关闭
第一次选择自动换行:
- 选中自动换行菜单项
-
wordWrapIsEnabled没有 (BZZZT 错误) - 自动换行已关闭(BZZZT 错误)
第二次选择自动换行:
- Word Wrap 菜单项未选中
-
wordWrapIsEnabled是 (BZZZT 错误) - 自动换行开启(BZZZT 错误)
无限重复触发器。
我已检查以确保我的项目中没有任何其他内容可以访问wordWrapIsEnabled。在调用选择器和通过绑定设置wordWrapIsEnabled 之间是否存在竞争条件?我一直假设首先设置绑定值。
【问题讨论】:
标签: nsuserdefaults cocoa-bindings nsmenuitem