2011-06-07 81 views
0

我正在创建一个应用程序,该应用程序可以浏览多层次的一对多关系。例如,假设CoreDataBooks代码示例从一个流派列表开始,您单击一个流派,然后,然后获取由Apple的代码示例中看到的作者组织的书籍列表。遍历与NSFetchedResultsControllers的一对多关系

这是我的问题:苹果文档告诉我,我应该使用FetchedResultsController来帮助组织我的书籍列表(除其他原因)。但是,当试图找出如何从“一种”流派到我的“许多”书籍时,核心数据常见问题解答告诉我们不要使用提取。从常见问题解答:

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

你不知道。更具体地说,不需要明确提取目标实例,只需在实体A的实例上调用适当的键值编码或访问器方法。

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

在这里进行的最佳途径是什么?我是否应该遵循常见问题解答,如果是这样,我该如何管理作者将我的书分成若干部分?

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

非常感谢您的帮助。

萨沙

回答

1

你有一个数据模型,看起来大致是这样的:

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

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

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

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

将一个核心数据对象图想象成一串珠串,它们都是在一个网或织物中编织在一起的。珠子是物体,弦是关系。抓取捡起丛中的一个珠子/物体,但是一旦你手中有了这个珠子/物体,那么你就可以拉动它的绳子/关系来拉出手中与珠子有关的所有珠子/物体。

所以,在大多数情况下,抓取只用于查找起始对象,然后通过遍历关系来查找大多数其他对象。

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