遍历与NSFetchedResultsControllers的一对多关系

时间:2011-06-07 15:22:58

标签: ios core-data nsfetchedresultscontroller one-to-many

我正在创建一个应用程序,可以浏览多个级别的一对多关系。例如,假设CoreDataBooks代码示例以类型列表开头,您单击一个类型,然后获取作者组织的书籍列表,如Apple的代码示例中所示。

这是我的问题:Apple文档告诉我应该使用FetchedResultsController来帮助将我的书籍列表组织成各个部分(以及其他原因)。但是当试图弄清楚如何从“一个”类型到我的“许多”书籍时,核心数据常见问题解答告诉不要使用提取。来自FAQ:

  

我有从实体A到实体B的多对多关系。如何获取与实体A的给定实例相关的实体B实例?

     

你没有。更具体地说,不需要显式地获取目标实例,只需在实体A的实例上调用适当的键值编码或访问器方法。

问题当然是我现在把我的书放在一套,但我希望他们从一个取得的结果控制器中获取它们。

这里最好的方法是什么?我应该按照常见问题解答进行操作,如果是这样,我该如何管理将我的书分成几部分?

或者我使用获取的结果控制器(我怀疑它更好),在这种情况下我如何遍历一对多的关系(因为Apple的哦,非常有用的答案就是“不要”) ?

非常感谢你的帮助。

萨莎

1 个答案:

答案 0 :(得分:1)

您的数据模型大致如下:

Genre{
  name:
  books<-->>Book.genre
}

Book{
  name:
  genre<<-->Genre.books
}

在主表中,运行一个获取的结果控制器以获取Genre个对象的表。然后,用户选择幕后选择特定Genre对象的行之一。

由于每个Genre对象都有books关系指向相关的Book对象,因此您自动获得了对所有相关书籍对象的引用,因此您不必取任何东西。对于您的book tableview,您只需在所选Book对象的Genre关系中创建books个对象的排序数组。

将核心数据对象图形视为在网络或结构中编织在一起的珠串。珠子是物体,琴弦是关系。取一个珠子/物体从丛中取出,但是一旦你掌握了珠子/物体,你就可以拉动它的绳子/关系,拉出手中与珠子相关的所有珠子/物体。

因此,在大多数情况下使用提取只是为了找到起始对象,然后你走路关系来找到大多数其他对象。

这就是为什么Apple文档说你不需要第二次获取。