由另一个托管对象数组过滤托管对象数组

时间:2012-08-18 22:07:35

标签: objective-c ios core-data nspredicate

我有一个可变的托管对象数组,我从Core Data获得 - 让我们称之为ObjectA。 ObjectA与ObjectB具有多对多关系,因此每个ObjectA都有一个ObjectBs的NSSet。 ObjectB与ObjectC具有一对多的关系,即每个ObjectB都有一个ObjectC。

现在很清楚(希望如此),这就是我想要做的事情:我想根据给定ObjectC的名称过滤我的ObjectAs数组。换句话说,我从核心数据中的所有ObjectAs数组开始,我想最终只得到拥有ObjectB的ObjectAs,其ObjectC被命名为“Potatoes”(例如)。我希望这是有道理的...这是一个虚拟的情况:一个人(ObjectA)可以有很多歌(ObjectB),歌曲可以由许多人拥有。我有一个每个人的阵列,但我只想拥有属于特定专辑(objectC)的歌曲的人。希望这有助于澄清情况。

那么,有没有人对如何根据给定的ObjectC最佳地过滤我的ObjectAs有任何建议?我当然可以通过一堆循环和ifs来强制它,但我想知道是否有更有效的方法以更少的步骤使用NSPredicate(我以前使用过,但不是多层次)像这样的情况)。

任何建议都将不胜感激!

修改

这是我的模型图:

model diagram

1 个答案:

答案 0 :(得分:3)

如果我正确理解您的问题,则以下提取请求应该有效:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"ObjectA"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY objectBs.objectC.name = %@", @"Potato"];
request.predicate = predicate;

NSError *error;
NSArray *result = [context executeFetchRequest:request error:&error];