1

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

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

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

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

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

有任何想法吗?

4

1 回答 1

0

正如评论中提到的,沃尔克的建议解决了这个问题。在 setValue:forKey 调用周围需要 willChangeValueForKey 和 didChangeValueForKey 消息,如下所示:

    [self willChangeValueForKey:@"startupState"];
    [self setValue:[[NSNumber alloc] initWithInt:1] forKey:@"startupState"];
    [self didChangeValueForKey:@"startupState"];
于 2014-02-08T00:11:34.737 回答