NSFetchRequest 带有用于递归 CoreData 实体关系的排序描述符

Posted

技术标签:

【中文标题】NSFetchRequest 带有用于递归 CoreData 实体关系的排序描述符【英文标题】:NSFetchRequest with sort descriptors for recursive CoreData Entity relationship 【发布时间】:2014-01-31 16:32:24 【问题描述】:

我有一个具有递归关系的简单 CoreData 实体“MyEntity”:

(在这种情况下,关系是一对一的关系)

假设我创建了这个实体的 5 个对象:

ObjectA -> ObjectB -> ObjectC -> ObjectD -> ObjectE

ObjectBObjectA 的孩子等等)

我想用 NSSortDescriptors 创建一个 NSFetchRequest,它以正确的顺序(从根到最后一个子)返回对象:

ObjectA
ObjectB
ObjectC
ObjectD
ObjectE

这可能吗? (我的具体问题有点复杂,但我想如果我解决了这个简单的问题,我就可以完成它)

【问题讨论】:

没人?我知道,这可能很难…… 【参考方案1】:

何必呢,只需获取父对象,然后直接从属性(关系)中获取它的子对象和子对象的子对象。如果您需要它们在数组中,则使用 while 循环遍历层次结构,直到 child = nil。

【讨论】:

是的,我已经这样做了,但是现在它是 n 个 fetch 请求而不是 1 个。超过 10000 个条目不会成为性能杀手吗? 面临类似的问题。如果我想在 NSFetchedResultsController 中使用结果怎么办?在表格视图中显示时,条目数可能会发生变化。知道如何实现吗?【参考方案2】:

我明白,这个问题已经过时了,但我想出了一些想法给那些以后会偶然发现的人

您可以使用一个带有谓词的 fetch 请求,声明 parent 必须为 nil。之后,您不再需要获取请求。您只需从这个(或更多,如果可能的话)对象中得到孩子。然后,您从这个新对象(原始对象的子对象)中获取子对象。继续,趁你还有孩子要养

【讨论】:

以上是关于NSFetchRequest 带有用于递归 CoreData 实体关系的排序描述符的主要内容,如果未能解决你的问题,请参考以下文章

带有 Predicate 的 NSFetchRequest 不返回对象

带有 NSdate 谓词的 NSFetchrequest

带有 NSDictionaryResultType 的 NSFetchRequest 在单元测试时返回空结果

NSFetchRequest 不适用于谓词

NSFetchRequest 用于行中的子对象

将 NSFetchRequest 重用于 Core Data 的多个不同提取有啥不好的吗?