一对多关系上的 NSFetchedResultsController

Posted

技术标签:

【中文标题】一对多关系上的 NSFetchedResultsController【英文标题】:NSFetchedResultsController on a one-to-many relationship 【发布时间】:2014-05-26 04:19:28 【问题描述】:

我正在实现NSIncrementalStore,我需要执行分页获取并维护请求中元素的顺序,然后在表格中显示结果并维护与查询关联的NSFetchedResultsController。 我会尝试用一个例子更好地解释我自己

我有两个实体,Entity1 和 Entity2。 Entity1 与 Entity2 具有一对多的关系,并且由于 fetch 意味着太多的对象,我想要执行分页请求。我需要维护从服务器到达的对象的顺序,以便将对象存储在NSOrderSet 中。 Entity2 和 Entity1 之间没有反比关系。

我遇到的问题是在这种情况下我不知道如何实例化NSFetchRequest

我已经阅读了使用 setRelationshipKeyPathsForPrefetching 的预取关系,但在我阅读的所有示例中,NSFetchRequest 都以 Entity1 作为实体 ([fetchRequest setEntity:[Entity1 class]]) 进行了实例化。我需要一组 Entity2 对象。

另一个想法是使用获取的属性,但由于我不能(而且我不想)对请求执行排序,所以我放弃了它。

我希望我很清楚,并提前感谢 Marcus Zarra 鼓励我提出这个问题。

非常感谢。

【问题讨论】:

【参考方案1】:

首先,您需要一个反向关系。 Core Data 确实应该要求它们,而不仅仅是警告。有了逆,这个问题就变得简单了。如果没有逆,那几乎是不可能的。

假设你添加了逆(你应该:)然后你设置你的NSFetchRequest反对Entity2的谓词“entity1 == %@”,你会得到你的结果。从那里你可以调整NSFetchRequest 来处理分页。

【讨论】:

这太棒了!非常感谢!

以上是关于一对多关系上的 NSFetchedResultsController的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 一对多关系上的保存方法的对立面是啥?

为啥当我在 grails 上删除一对多关系上的父级时,会在子级上调用 beforeInsert 事件?

排除某些对象的一对多关系上的 NSFetchRequest 无法按预期工作

使用 Play with Scala 和 Slick 在不同文件上的表之间建立一对多关系

一对多删除对象不删除多个实体上的对象

如何管理 Core Data 中的一对多关系?