【发布时间】:2009-03-24 20:54:36
【问题描述】:
我正在尝试一些 MacOS 编程,但在理解绑定如何与 NSPopupButton 一起工作时遇到了一些麻烦。我对绑定到 NSDictionaryController 感兴趣(我认为我不需要中间 NSArrayController 但如果这是最好的方法,我愿意接受)。
我创建了一个控制器对象,它有一个属性“db”,它有一个属性“species”,它是一个 NSMutableDictionary。 'species' 字典具有键的 ID 和值的 Species 对象。 Species 对象具有描述属性。在 InterfaceBuilder 中,我创建了 MyController、NSDictionaryController 和一个 NSPopupButton。我想用 Species.descriptions 填充弹出窗口。选中后,我需要访问相应的 ID。
我已设置 NSDictionaryController 以使用模型键路径“db.species”将“内容字典”绑定到 MyController。使用 NSPopupButton,到目前为止,我已经将“内容值”绑定到 NSDictionaryController,控制器键“arrangedObjects”和模型键路径设置为“value.description”。
这似乎可以填充列表。我的主要问题是连接选择的最佳方法是什么。理想情况下,我想将选择连接到 NSDictionaryController 以便我可以使用 NSDictionaryController 来访问选择。这样做的一个原因是我可以将其他控件连接到 NSDictionaryController 以查看当前选择。如果没有,我应该连接到 MyController 中的属性还是什么?只是寻找最佳实践。我希望通过 Interface Builder 机制,以便我可以轻松地在具有不同视图的另一个应用程序中重用模型和控制器设计。
使用 Brian 的回答作为指导进行更新:
NSPopupButton: 将内容绑定到 NSDictionaryController->arrangedObjects->value.description
将内容对象绑定到 NSDictionaryController->arrangedObjects->key
将选定索引绑定到 NSDictionaryController->selectionIndex
绑定 NSDictionaryController->db.species
似乎一切正常。我可以使用 [[[controller selectedObjects] lastObject] value] 从控制器中获取对象。我相信它在一个带有键值对的选定对象的数组中。
【问题讨论】:
标签: objective-c cocoa model-view-controller