我想将 NSPopUpButton 的选择绑定到预定义值之一。为了简单起见,想象一个博客应用程序:我有BlogPost
实体Category
(核心数据,虽然没关系),每个BlogPost
对象都有一个到其中一个对象的链接Category
(通过category
属性)。
我想让用户通过 NSPopUpButton 更改类别,所以在我的 XIB 中,我有 NSArrayController 保存所有可能的类别,并将按钮的内容值绑定到:
- 绑定到:categoriesArrayController
- 控制器键:排列对象
- 型号键:title
这很好地填充了所有类别的标题。我还可以将选定对象绑定到:
- 绑定到:blogObjectController(或直接绑定到
Blog
对象) - 控制器键:选择
- 型号键:类别
这有效并且在弹出窗口中选择了正确的类别,但是更改选择不会更改提交博客帖子的类别,而是将帖子类别的标题更改为所选值。
鉴于上述绑定,这实际上是有道理的,所以我的下一步是将弹出窗口的内容值的绑定更改为仅排列对象(无模型键),类似选择的对象。这有效,并且更改选择确实category
将博客文章更改为另一篇文章。但它不会在弹出菜单中显示类别标题,而是显示description
类别的(在核心数据中以<Category 0x1002b6990> (entity: Category; id: .......)
.
这也是有道理的,所以我介绍了自定义NSValueTransformer
(不可逆)。这修复了弹出菜单中的项目描述,但随后选择不起作用。我还尝试在选定对象绑定上使用转换器,但这只会完全禁用我的弹出窗口(也许需要反向转换,但这会使转换器变得相当复杂)。
我是否遗漏了一些明显的东西——这是否可以完全通过绑定来实现,而无需在控制器层上引入额外的代码?
任何虽然是受欢迎的!
PS:希望上面的文字有意义:)