【发布时间】:2013-11-11 02:56:14
【问题描述】:
似乎有很多关于绑定 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;
我想这是有道理的,因为弹出窗口试图将“name”的字符串值设置为选定的 Bar。因此,我认为我需要绑定选定对象和选定值,但如果我设置了选定对象,XIB 将禁用选定值。
我也尝试过绑定选定的值,这一半有效(数组控制器的选择确实发生了变化),但弹出菜单中的选项不会改变以显示被取消选择的选项并隐藏新选择的选项)。
我在这里读了一篇文章:http://blog.chrisblunt.com/cocoa-bindings-and-nspopupbutton/,上面写着 NSPopupButton“NSPopUpButton 不记录用户的选择”,而是将您的选择存储在数组控制器以外的其他地方。我尝试在我的窗口中放置一个 currentBar 属性并将选择绑定到该属性,虽然我可以看到 currentBar 正在改变(因为我也绑定了另一个视图),但弹出按钮中的标签没有改变。
如果有人可以帮助我,我将非常感激。
【问题讨论】:
-
NSPopupButton 可以很好地用于绑定,我一直都在使用它。我会挖出一个例子并很快为你发布。
标签: objective-c macos core-data cocoa-bindings nsarraycontroller