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
(ObjectB
是ObjectA
的孩子等等)
我想用 NSSortDescriptors 创建一个 NSFetchRequest,它以正确的顺序(从根到最后一个子)返回对象:
ObjectA
ObjectB
ObjectC
ObjectD
ObjectE
这可能吗? (我的具体问题有点复杂,但我想如果我解决了这个简单的问题,我就可以完成它)
【问题讨论】:
没人?我知道,这可能很难…… 【参考方案1】:何必呢,只需获取父对象,然后直接从属性(关系)中获取它的子对象和子对象的子对象。如果您需要它们在数组中,则使用 while 循环遍历层次结构,直到 child = nil。
【讨论】:
是的,我已经这样做了,但是现在它是 n 个 fetch 请求而不是 1 个。超过 10000 个条目不会成为性能杀手吗? 面临类似的问题。如果我想在 NSFetchedResultsController 中使用结果怎么办?在表格视图中显示时,条目数可能会发生变化。知道如何实现吗?【参考方案2】:我明白,这个问题已经过时了,但我想出了一些想法给那些以后会偶然发现的人
您可以使用一个带有谓词的 fetch 请求,声明 parent 必须为 nil。之后,您不再需要获取请求。您只需从这个(或更多,如果可能的话)对象中得到孩子。然后,您从这个新对象(原始对象的子对象)中获取子对象。继续,趁你还有孩子要养
【讨论】:
以上是关于NSFetchRequest 带有用于递归 CoreData 实体关系的排序描述符的主要内容,如果未能解决你的问题,请参考以下文章
带有 Predicate 的 NSFetchRequest 不返回对象