似乎有很多关于绑定 NSPopupButton 的问题,所以我觉得为此苦苦挣扎要好一些,但似乎没有一个能解决我的问题。
我有一个 NSManagedObject 子类,它与另一个类具有一对多的关系。假设 Foo 与 Bar 有关系,所以 Foo 有一个属性是 Bars 的 NSSet。
我创建了一个 NSArrayController 并将其 contentSet 绑定到 Foo 对象和“bars”键路径。
然后我将我的 NSPopupButton 的内容绑定到数组控制器的排列对象,并将它的 contentValues 绑定到数组控制器的排列对象(控制器键)和“名称”(我要显示的 Bar 上的属性)。
到目前为止,这一切都很好,但是当我尝试将 NSPopupButton 的选定对象绑定到数组控制器的选择时,NSPopupButton 显示“<_NSArrayControllerObjectProxy”。我还尝试添加“名称”作为此绑定的 keyPath,这确实使 NSPopupButton 正确显示名称,但是当我在弹出窗口中更改选择时,应用程序抛出异常:
Unacceptable type of value for attribute: property = "name"; desired type = NSString; given type = Bar;
我想这是有道理的,因为弹出窗口试图将“名称”的字符串值设置为选定的栏。我想我因此需要绑定一个选定的对象和一个选定的值,但如果我有一个选定的对象集,XIB 将禁用选定的值。
我也尝试过绑定选定的值,这一半有效(数组控制器的选择确实发生了变化),但弹出菜单中的选项不会改变以显示被取消选择的选项并隐藏新选择的选项)。
失败了这一切,我在这里读了一篇文章:http: //blog.chrisblunt.com/cocoa-bindings-and-nspopupbutton/说 NSPopupButton “NSPopUpButton 不记录用户的选择”,而是将您的选择存储在除阵列控制器。我尝试在我的窗口中放置一个 currentBar 属性并将选择绑定到该属性,尽管我可以看到 currentBar 正在更改(因为我也绑定了另一个视图),但弹出按钮中的标签没有更改。
如果有人可以帮助我,我将不胜感激。