ale*_*ntd 1 nsuserdefaults cocoa-bindings nsmenuitem
我的主菜单(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
}
}
Run Code Online (Sandbox Code Playgroud)
在我的app delegate +initialize方法中,我使用默认值填充标准用户默认值:
+ (void)initializeDefaults {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], @"wordWrapIsEnabled",
// etc.
nil];
NSUserDefaultsController *ctrlr = [NSUserDefaultsController sharedUserDefaultsController];
[ctrlr setInitialValues:defaults];
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我的NSMenuItem状态与我的用户默认值不同步.以下是发生的事情的时间表:
应用发布:
wordWrapIsEnabled 没有第一次选择Word Wrap:
wordWrapIsEnabled不是(BZZZT WRONG)第二次选择Word Wrap:
wordWrapIsEnabled是(BZZZT WRONG)无限重复触发器.
我已经检查过以确保我的项目中没有其他内容可以访问wordWrapIsEnabled.在选择器的调用和wordWrapIsEnabled绑定的设置之间是否存在竞争条件?我一直在假设首先设置绑定值.
zou*_*oul 10
单击带有bound state(或value)属性的菜单项时,菜单项都会触发其操作并翻转绑定值.并且似乎无法保证这两个操作的顺序,请参阅Cocoa Builder上的以下线程:
谢谢,我不是很确定,因为我在我的项目中做了一些更改,但我认为这可以被认为是10.5 sdk的错误,因为它开始发生在我开始编译它时.针对Tiger的(几乎)相同项目总是在执行目标操作之前更改绑定值 ,无论它是按钮还是menuItem.显然,Leopard已经打破了这种一致性.我可能会在一些测试后发布错误报告来确认.
还有一个相关的雷达错误报告说菜单项不应该自动翻转绑定值.作为你的问题的答案,这可能为时已晚,但希望下次有人遇到这个问题时会有所帮助.
| 归档时间: |
|
| 查看次数: |
1634 次 |
| 最近记录: |