核心数据谓词 - 检查数组中的任何元素是否与另一个数组中的任何元素匹配

时间:2014-08-06 11:30:55

标签: ios arrays core-data nspredicate

我正在尝试使用谓词来过滤两个数组之间存在交集的对象。

NSManagedObject有一个名为“传输”的数组(Of Strings)属性。还有另一个数组(Of Strings)将包含要过滤的单词,名为“filters”。

我不确定如何查找“传输”中的任何元素是否与“过滤器”中的任何元素匹配。

我试过

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF.transmission in[c] %@",transmissions];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY transmission in[c] %@",transmissions];

但是,核心数据在应该存在的情况下不会产生任何结果。

2 个答案:

答案 0 :(得分:1)

试试这个。

NSPredicate *predicate = nil;
NSMutableArray *predicates = [NSMutableArray new];
for (NSString *transmission in transmissions) {
    [predicates addObject:[NSPredicate predicateWithFormat:@"transmission == %@", transmission]];
}
if (predicates.count > 0)
    predicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];

// make fetch request using 'predicate'

答案 1 :(得分:0)

您可以使用关键字CONTAINS来检查集合中是否存在对象。

[NSPredicate predicateWithFormat:@"favouriteFilms CONTAINS %@", film]

我相信通过切换谓词的LHS和RHS,IN可以实现同样的目的。我只使用CONTAINS成功实现了此功能。