Objective c 高效的核心数据递归 上下文
我有一个称为“LPFile”的核心数据实体,它表示磁盘上的文件。它与自身具有可选关系,允许文件相互“导入”,如下所示: 进口人 问题: 现在,假设我对文件1、2、3和4有这种情况: 文件1由2和3导入。文件2和3由4导入。我想知道的是:如果我从文件1开始,那么找到这个关系的“基”或“结束”文件(在本例中是文件4)的最有效方法是什么?我可以编写一个简单的递归函数,它查看importedBy关系中的每个实体,并沿着该链,直到在importedBy关系中找到一个实体为零的实体,但我想看看核心数据是否有一个预烘焙的方法来执行此操作Objective c 高效的核心数据递归 上下文,objective-c,cocoa,macos,core-data,recursion,Objective C,Cocoa,Macos,Core Data,Recursion,我有一个称为“LPFile”的核心数据实体,它表示磁盘上的文件。它与自身具有可选关系,允许文件相互“导入”,如下所示: 进口人 问题: 现在,假设我对文件1、2、3和4有这种情况: 文件1由2和3导入。文件2和3由4导入。我想知道的是:如果我从文件1开始,那么找到这个关系的“基”或“结束”文件(在本例中是文件4)的最有效方法是什么?我可以编写一个简单的递归函数,它查看importedBy关系中的每个实体,并沿着该链,直到在importedBy关系中找到一个实体为零的实体,但我想看看核心数据是否有
谢谢 核心数据没有找到根的预烘焙方法。所以你的循环方式很好。虽然这个问题已经得到了回答,但我通过添加一个名为“面包屑”的属性并在运行时填充该属性,解决了由相同实体组成的树上的一个类似问题,这样我就有了实体模型
X {
name NSString
breadcrumb NSString
to-many X relationship
}
A、 B,C,D,E像这样:
A-->B
-->C-->D
-->E
我的结论是:
A {
breadcrumb /A
relationship B,C,E
}
B {
breadcrumb /A/B
relationship nil
}
C {
breadcrumb /A/C
relationship D
}
D {
breadcrumb /A/C/D
relationship nil
}
E {
breadcrumb /A/D
relationship nil
}
我可以说索引面包屑,使事情更快,我可以做正则表达式搜索。
重要的是,当我有一个实体,我可以很容易地找到它的根,而无需循环。
当然,基于“name”属性,我有一些机制来避免面包屑的循环和唯一性。这对我来说没什么意义。你想对文件4做什么?另外,您是否有适当的约束来防止循环引用,例如5 importedBy 6、6 importedBy 7、7 importedBy或5,或者更简单地说8 importedBy 9、9 importedBy 8?是的,我有约束来防止无限循环。我观察这些文件的更改,因此当File1更改时,我需要沿着链条走到文件4并进行一些处理。但是你不需要处理文件2和文件3,即使它们也包括文件1?@noa:no。目标是找到启动导入文件链的根文件或基文件。递归函数方法当然足够快,但我认为可能有一种预先烘焙的方法可以在核心数据中找到“关系根”。