Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 高效的核心数据递归 上下文_Objective C_Cocoa_Macos_Core Data_Recursion - Fatal编程技术网

Objective c 高效的核心数据递归 上下文

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关系中找到一个实体为零的实体,但我想看看核心数据是否有

我有一个称为“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。目标是找到启动导入文件链的根文件或基文件。递归函数方法当然足够快,但我认为可能有一种预先烘焙的方法可以在核心数据中找到“关系根”。