我正在创建一个应用程序,可以浏览多个级别的一对多关系。例如,假设CoreDataBooks代码示例以类型列表开头,您单击一个类型,然后获取作者组织的书籍列表,如Apple的代码示例中所示。
这是我的问题:Apple文档告诉我应该使用FetchedResultsController来帮助将我的书籍列表组织成各个部分(以及其他原因)。但是当试图弄清楚如何从“一个”类型到我的“许多”书籍时,核心数据常见问题解答告诉不要使用提取。来自FAQ:
我有从实体A到实体B的多对多关系。如何获取与实体A的给定实例相关的实体B实例?
你没有。更具体地说,不需要显式地获取目标实例,只需在实体A的实例上调用适当的键值编码或访问器方法。
问题当然是我现在把我的书放在一套,但我希望他们从一个取得的结果控制器中获取它们。
这里最好的方法是什么?我应该按照常见问题解答进行操作,如果是这样,我该如何管理将我的书分成几部分?
或者我使用获取的结果控制器(我怀疑它更好),在这种情况下我如何遍历一对多的关系(因为Apple的哦,非常有用的答案就是“不要”) ?
非常感谢你的帮助。
萨莎
答案 0 :(得分:1)
您的数据模型大致如下:
Genre{
name:
books<-->>Book.genre
}
Book{
name:
genre<<-->Genre.books
}
在主表中,运行一个获取的结果控制器以获取Genre
个对象的表。然后,用户选择幕后选择特定Genre
对象的行之一。
由于每个Genre
对象都有books
关系指向相关的Book
对象,因此您自动获得了对所有相关书籍对象的引用,因此您不必取任何东西。对于您的book tableview,您只需在所选Book
对象的Genre
关系中创建books
个对象的排序数组。
将核心数据对象图形视为在网络或结构中编织在一起的珠串。珠子是物体,琴弦是关系。取一个珠子/物体从丛中取出,但是一旦你掌握了珠子/物体,你就可以拉动它的绳子/关系,拉出手中与珠子相关的所有珠子/物体。
因此,在大多数情况下使用提取只是为了找到起始对象,然后你走路关系来找到大多数其他对象。
这就是为什么Apple文档说你不需要第二次获取。