Cocoa数据层次结构和浏览器

时间:2010-02-17 02:21:15

标签: cocoa core-data cocoa-bindings

我正在尝试实现类似于iTunes浏览器的东西,浏览一个简单的Books数据库。我有以下实体 - 作者流派预订。我想显示一个作者列表和一个流派列表,用于过滤主要的书籍列表 我尝试过两种不同的方式 - 模仿:

Author ( has many ) Genres ( has many ) Books

...对于同一类型的多个实例,所以每个作者对于给定的类型名称都有自己的,我有一个很好的深入层次结构显示在我的表视图中(虽然复制类型有点不合逻辑)。但是,当我选择多个作者时,我最终会显示同一类型的欺骗,因为它们实际上是不同的对象。

所以,我尝试用这些关系更明智地做到这一点:

Author ( has many ) Books  
Book ( has one ) Genre

我可以通过在当前选定的作者书籍阵列中采用流派的明显联合来获得流派阵列,但现在我留下了根据所选流派过滤显示的书籍列表的问题。 。因为类型是共享的,我不能只使用CurrentGenre.books,否则我将丢失所选的作者过滤。我已经注意到界面构建器中的“过滤器谓词”字段,可以在对象控制器上找到,但是我不知道如何实际使用它来将选定的类型作为过滤器应用于剧集列表。 The apple documentation说:

  

“您可以直接输入谓词   进入谓词编辑器文本字段   在Interface的检查员面板中   建造者或您可以设置它   以编程方式使用   setFetchPredicate:

这给我的印象是我在正确的轨道上,但那是关于它的结束。我正试图以一种漂亮的可可式方式锁定模型,以便最小化“胶水代码”位并在以后的轨道上进行更改。这似乎是一个相当简单的问题,我应该能够在IB中以图形方式进行整理,但到目前为止它还没有找到我!

提前致谢。

1 个答案:

答案 0 :(得分:2)

我对你在讨论中引入“剧集”感到有些困惑,但我认为你的意思仍然是“书籍”。

你肯定是在正确的轨道上。你想要一个像这样的数据模型:

作者< - >>图书
类型< - >>书

或者甚至可能:
作者<< - >>书(如果你支持参考书等)
类型< - >>预订(如果您需要多种类型的支持)

一旦用户选择了作者和类型,您将需要Book数组控制器使用仅显示具有这些作者或类型的书籍的过滤谓词。

<强>更新
这应该有效:

  1. 将Book数组控制器的过滤谓词绑定到您的app delegate中的新谓词属性“bookFilterPredicate”。
  2. 为作者和类型阵列控制器添加插座。
  3. 观察对两个阵列控制器的selectedObjects属性的更改。
  4. 如果更改,请更新过滤谓词属性,如下所示:self.bookFilterPredicate = [NSPredicate predicateWithFormat:@"author IN %@ && genre IN %@",authorArrayController.selectedObjects,genreArrayController.selectedObjects];