假设我有3个实体,X,Y,Z。
X有一个多对多关系“Ys”指向Y,而Z是Y的子实体。
在我的情况下,我想获取给定X的所有“Y”,但我不想要任何Z.
以下是我目前的代码:
X *anX;
NSSet *my_Ys = [anX valueForKey:@"Ys"];
然而,我发现它确实获取了所有的Zs,并在my_Ys集中与Ys混合,这不是我想要的。
但是我没有找到一种专业的方法来避免这种情况,除了检查my_Ys中所有对象的实体名称以便逐个过滤该集合,我认为这有点慢。
那么任何人都可以提供一些帮助吗?我真的很感激!
非常感谢!
答案 0 :(得分:0)
如果您使用获取请求获取Y,则可以将'includesSubentities`设置为FALSE。当您通过与X的关系检索Y时,您不能这样做,但您应该能够通过比较Y实例的类来对返回的集使用谓词:
NSPredicate *pred = [NSPredicate predicateWithFormat: @"class == %@", [Y class]];
NSSet *only_Ys = [my_Ys filteredSetUsingPredicate:pred];
答案 1 :(得分:0)
所以,你的对象图看起来像这样
X< --->> Y< ---> ž
Core Data的优点在于,您通常不必担心修剪对象图,因为它会通过称为故障的机制智能地为您管理对象图。故障减少了应用程序消耗的内存量。 fault是一个占位符对象,表示尚未完全实现的托管对象,或者是表示关系的集合对象:
故障处理是透明的 - 您不必执行提取来实现故障。如果在某个阶段访问了一个故障对象的持久属性,那么Core Data会自动检索该对象的数据并初始化该对象。
有关更多信息,请查看Apple的核心数据编程指南Faulting and Uniquing section。