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

Posted

技术标签:

【中文标题】核心数据谓词 - 检查数组中的任何元素是不是与另一个数组中的任何元素匹配【英文标题】:Core Data Predicate - Check if any element in array matches any element in another array核心数据谓词 - 检查数组中的任何元素是否与另一个数组中的任何元素匹配 【发布时间】:2014-08-06 11:30:55 【问题描述】:

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

NSManagedObject 有一个名为“transmissions”的数组(字符串)属性。还有另一个数组(字符串),其中包含要过滤的单词,名为“filters”。

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

我试过了

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

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

但是,核心数据在应该有的地方没有获取任何结果。

【问题讨论】:

您能提供更多信息吗?例如,您是从NSFetchedResultsController 还是NSFetchRequest 调用这些值?我问是因为要提供合适的响应,我需要更好地理解您的提取问题的代码上下文(不是NSManagedObjectContext)。 我很抱歉。它来自一个常规的 NSFetchRequest。 【参考方案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'

【讨论】:

【参考方案2】:

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

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

我相信IN 可以通过切换谓词的 LHS 和 RHS 来实现相同的效果。但是,我仅使用CONTAINS 成功实现了此功能。

【讨论】:

以上是关于核心数据谓词 - 检查数组中的任何元素是不是与另一个数组中的任何元素匹配的主要内容,如果未能解决你的问题,请参考以下文章

从一个表中选择所有元素,并检查它们是不是与另一个表匹配

如何检查字符串是不是包含数组中的任何元素[关闭]

可可 iphone 核心数据谓词一对多 fetchrequest

需要编写一个谓词来搜索核心数据对象数组属性中的日期(在我的例子中是日期数组)

如何检查一个数组是不是包含另一个数组的任何元素

核心数据:谓词中的对象