【问题标题】:Traversing one-to-many relationships with NSFetchedResultsControllers使用 NSFetchedResultsControllers 遍历一对多关系
【发布时间】:2011-06-07 15:22:58
【问题描述】:

我正在创建一个可以在多个级别的一对多关系中导航的应用。例如,假设CoreDataBooks 代码示例以流派列表开头,您单击一个流派并然后获取按作者组织的书籍列表,如 Apple 的代码示例所示。 p>

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

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

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

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

在这里进行的最佳方式是什么?我应该遵循常见问题解答吗?如果是,我如何按作者将我的书分成几部分?

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

非常感谢您的帮助。

萨沙

【问题讨论】:

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


    【解决方案1】:

    您的数据模型大致如下所示:

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

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

    由于每个Genre 对象都有一个指向相关Book 对象的books 关系,因此您会自动获得对所有相关图书对象的引用,因此您无需获取任何内容。对于您的书表视图,您只需在选定的Genre 对象的books 关系中创建Book 对象的排序数组。

    将 Core Data 对象图想象成一团串珠串,所有这些串珠在网或织物中编织在一起。珠子是对象,弦是关系。一次抓取会从团块中取出一个珠子/物体,但是一旦你拿到了那个珠子/物体,你就可以拉动它的绳子/关系来拉出与你手中的珠子相关的所有珠子/物体。

    因此,在大多数情况下,提取只是用于查找起始对象,然后您遍历关系以查找大多数其他对象。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 2014-04-09
      • 2013-06-21
      相关资源
      最近更新 更多