我必须在两个数组上执行通配符搜索,并且正在使用IN运算符,但是IN运算符为我提供了精确匹配,但我想获取包含searchTerm的所有结果。通过IN运算符可以做到这一点还是我必须手动遍历所有记录并匹配选择我想要的记录。

当前代码:

        NSArray *filteredArray = [brandsFabric filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.color_name IN  %@ OR self.subcategory_name IN %@",colorNamesArray,patternNamesArray]];


所需功能如下:

        NSArray *filteredArray = [brandsFabric filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.color_name IN like/contains %@ OR self.subcategory_name IN like/contains %@",colorNamesArray,patternNamesArray]];

最佳答案

这是一个非常昂贵的操作,但是您可以尝试:

NSMutableArray *predicates = [NSMutableArray array];
for (NSString *name in colorNames) {
   [predicates addObject:[NSPredicate predicateWithFormat:
       @"color_name CONTAINS[cd] %@", name]];
}
for (NSString *name in subcategoryNames) {
   [predicates addObject:[NSPredicate predicateWithFormat:
       @"subcategory_name CONTAINS[cd] %@", name]];
}
NSPredicate *final = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];


也许在这里甚至还有一个子查询。 (实验性)

[NSPredicate predicateWithFormat:
  @"((SUBQUERY(%@, $x, color_name CONTAINS[cd] $x).@count != 0) OR "
  @"((SUBQUERY(%@, $x, category_name CONTAINS[cd] $x).@count != 0)",
  colorNames, categoryNames];

关于ios - 核心数据谓词IN运算符具有like或contains,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27244547/

10-09 01:45