7

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

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

  • 绑定到:categoriesArrayController
  • 控制器键:排列对象
  • 型号键:title

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

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

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

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

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

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

任何虽然是受欢迎的!

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

4

1 回答 1

9

我会尝试如下:

NSPopupButton 的:

  • 将内容绑定到:categoriesArrayController ControllerKey:arrangedObjects
  • 将内容值绑定到:categoriesArrayController ControllerKey:arrangedObjects模型键路径:标题
  • 将选定对象绑定到:blogObjectController ControllerKey:(empty)模型键路径:content.category
于 2012-06-04T20:46:05.200 回答