使用setValue时,NSPopupButton不会更新:forKey:对抗它的CoreData绑定字段

时间:2014-02-07 04:19:06

标签: cocoa core-data nspopupbutton

我正在开发基于CoreData / Document的应用。在UI的一个区域中,我设置了一个包含各种列的视图模式表。一列中有一个NSPopupButton,其中Selected Index绑定设置为Table Cell View.objectValue.startupState。

选中弹出窗口中的任何菜单项将正确更新实体上的startupState属性,并单击菜单项的索引并同时更新NSPopupButton文本。我已经验证了属性值实际上是通过保存,关闭和重新打开文档来更新的。

在另一列中,我有一个NSPopupButton绑定类似于同一实体中的另一个属性 - Table Cell View.objectValue.mode。根据模式选择,它将通过setMode的手动实现修改startupState值,setMode在某些情况下执行此语句:

[self setValue:[[NSNumber alloc] initWithInt:1] forKey:@"startupState"];

我遇到的问题是NSPopupButton没有更新以显示所选索引的菜单项文本。和以前一样,在上面的代码运行并且选择了正确的项目/文本后,我保存,关闭并重新打开文档,所以我知道setValue调用更新了属性。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的,Volker的建议解决了这个问题。围绕setValue:forKey调用需要willChangeValueForKey和didChangeValueForKey消息:

    [self willChangeValueForKey:@"startupState"];
    [self setValue:[[NSNumber alloc] initWithInt:1] forKey:@"startupState"];
    [self didChangeValueForKey:@"startupState"];