使用跨越多个实体的Core Data绑定在Cocoa中实现parent->子级向下钻取

时间:2009-11-08 20:42:45

标签: cocoa core-data cocoa-bindings

我正试图以iTunes Genre浏览器的风格为我的核心数据模型创建一个简单的界面。

我有一个包含三个实体的模型设置:Genre <-->> Artist <-->> Album

我想简单地将它们分别绑定到NSTableView,但看起来好像从NSArrayController访问子关系不符合KVC。所以,我很难将选定的Genre对象传递给ArtistController。

你是怎么做到的?在没有任何自定义子类化的情况下,它甚至可以在IB中使用吗?

编辑后人:我做错了几件事。

  • 子控制器需要通过自己的绑定了解managedObjectContext。
  • 子控制器必须处于Entity模式,而是作为NSMutableDictionary类运行。
  • 最后,子控制器不准备其数据。它通过Content Set绑定从父级检索它。使用控制器键selection和连接到子项的模型键路径。

。 Brian的回答和this MacResearch tutorial都有助于确定我的错误(以及我有哪些部分)。

1 个答案:

答案 0 :(得分:4)

我可能采取的方法是为每个表视图设置一个单独的NSArrayController,然后让一个数组控制器的内容基于另一个数组控制器的选择。

例如,假设您有表格视图A,它显示可用类型的列表,因此它有一个数组控制器A,其内容连接到您的托管对象上下文。

然后,假设您有表格视图B,其中显示了表A中选择的任何类型的可用艺术家。该表将具有其自己的阵列控制器B,并且控制器B的内容数组被绑定,因此“控制器键” IB中的字段设置为控制器A的“选择”键,“艺术家”是模型键(假设您的类型实体具有与艺术家实体名称为“艺术家”的多对多关系)。

然后,您可以将相同的原则应用于第三个表格视图+控制器,以显示所选艺术家的专辑。

此类设置的一般术语是“主 - 详细界面”,并在Apple this link

的文档中进行了概述