将NSPopupButton绑定到NSDictionaryController

时间:2009-03-24 20:54:37

标签: objective-c cocoa model-view-controller

我正在尝试一些MacOS编程,并且在理解绑定如何与NSPopupButton一起工作时遇到一些麻烦。我有兴趣绑定到NSDictionaryController(我不认为我需要一个中间NSArrayController,但如果这是最好的方式,我对它开放)。

我创建了一个控制器对象,它有一个属性'db',它有一个属性'species',它是一个NSMutableDictionary。 'species'字典具有用于键的ID和用于值的Species对象。物种对象具有描述属性。在InterfaceBuilder中,我创建了MyController,NSDictionaryController和NSPopupButton。我想用Species.descriptions填充弹出窗口。选中后,我需要访问相应的ID。

我已经设置了NSDictionaryController,将“Content Dictionary”与Model Key Path“db.species”绑定到MyController。使用NSPopupButton,到目前为止,我已将“内容值”绑定到NSDictionaryController,控制器键为“arrangeObjects”,模型键路径设置为“value.description”。

这似乎可以填充列表。我的主要问题是连接选择的最佳方式是什么。理想情况下,我想将选择连接到NSDictionaryController,以便我可以使用NSDictionaryController来访问选择。这样做的一个原因是我可以将其他控件连接到NSDictionaryController以查看当前选择。如果没有,我应该连接到MyController中的属性还是什么?只是寻找最佳实践。我希望通过Interface Builder机制,以便我可以轻松地在具有不同视图的另一个应用程序中重用模型和控制器设计。

使用Brian的答案作为指导进行更新:

NSPopupButton: 将内容绑定到NSDictionaryController-> arrangeObjects-> value.description

将内容对象绑定到NSDictionaryController-> arrangeObjects-> key

将所选索引绑定到NSDictionaryController-> selectionIndex

绑定NSDictionaryController-> db.species

一切似乎都有效。我可以用[[[controller selectedObjects] lastObject] value]从控制器中获取对象。我相信它位于一组具有键值对的选定对象中。

2 个答案:

答案 0 :(得分:3)

我从未尝试过使用NSDictionaryController,但我认为您希望将弹出窗口的contentObjects绑定到dict控制器的“arrangeObjects.key”,并将selectedObject绑定到dict控制器的“selection”键。 contentObjects绑定将ID指定为每个菜单项所代表的基础对象。然后,当从弹出窗口中选择一个项目时,selectedObject绑定会将与该菜单项对应的ID设置为dict控制器的选择。

答案 1 :(得分:2)

  

我想用Species.descriptions填充弹出窗口。选中后,我需要访问相应的ID。

content绑定到字典控制器的arrangedObjects.value(不包括description - 弹出按钮将为您执行此操作)和contentObjects绑定到字典控制器arrangedObjects.key

有关详细信息,请参阅NSPopUpButton in the Cocoa Bindings Reference

(我注意到它将content描述为“一个NSArrayController实例...”。字典控制器是数组控制器,所以这不应该是一个问题,但绑定到控制器的属性可能是。要注意的东西出去。)