【问题标题】:How to setup bindings for NSPopUpButton如何为 NSPopUpButton 设置绑定
【发布时间】:2012-06-04 17:01:18
【问题描述】:

我想将 NSPopUpButton 的选择绑定到预定义值之一。为了简单起见,想象一个博客应用程序:我有 BlogPostCategory 实体(核心数据,虽然没关系),每个 BlogPost 对象都有一个指向 Category 对象之一的链接(通过category 属性)。

我想让用户通过 NSPopUpButton 更改类别,所以在我的 XIB 中,我有 NSArrayController 保存所有可能的类别,我将按钮的 Content Values 绑定到:

  • 绑定到:categoriesArrayController
  • 控制器键:arrangedObjects
  • 型号键:标题

这很好地填充了所有类别的标题。我还可以将 Selected Object 绑定到:

  • 绑定到:blogObjectController(或直接绑定到Blog对象)
  • 控制器键:选择
  • 型号键:类别

这可行,并且在弹出窗口中选择了正确的类别,但是更改选择不会更改提交博客帖子的类别,而是将帖子类别的标题更改为所选值。

鉴于上述绑定,这实际上是有意义的,所以我的下一步是将弹出窗口的内容值的绑定更改为仅 arrangedObjects(无模型键),类似地选择对象。这有效,更改选择确实将博客文章的category 更改为另一个。 但是它不会在弹出菜单中显示类别标题,而是显示类别的 description(在核心数据中以 <Category 0x1002b6990> (entity: Category; id: .......) 之类的结尾。

这也是有道理的,所以我介绍了自定义NSValueTransformer(不可逆)。这修复了弹出菜单中的项目描述,但随后选择不起作用。我还尝试在选定对象绑定上使用转换器,但这只会完全禁用我的弹出窗口(也许需要反向转换,但这会使转换器变得相当复杂)。

我是否遗漏了一些明显的东西 - 这是否可以完全通过绑定来实现,而无需在控制器层上引入额外的代码?

尽管欢迎!

PS:希望上面的文字有意义:)

【问题讨论】:

    标签: cocoa selection cocoa-bindings nspopupbutton


    【解决方案1】:

    我会尝试如下:

    NSPopupButton:

    • Content 绑定到:categoriesArrayController ControllerKey:arrangedObjects
    • Content Values 绑定到:categoriesArrayController ControllerKey:arrangedObjects Model Key Path:title
    • 选定对象绑定到:blogObjectController ControllerKey:(empty) Model Key Path:content.category

    【讨论】:

    • 就是这样,我现在记得了,谢谢 :) 我很困惑,因为 Content values 被禁用,只有 Content 被允许。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多