【问题标题】:Binding an NSPopupButton to an NSDictionaryController将 NSPopupButton 绑定到 NSDictionaryController
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      content 绑定到字典控制器的arrangedObjects.value(不要包括description——弹出按钮会为您完成)并将contentObjects 绑定到字典控制器的arrangedObjects.key

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

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

      【讨论】:

        猜你喜欢
        • 2011-11-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多