假设我想让用户使用对象的名称属性搜索我的对象。
如果用户只输入一个单词,我没有问题: 例如:面部
我的谓词是:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", word];
但是,如果用户输入多个以空格分隔的单词,该怎么办? 我想做某事:
NSArray *words = [query componentsSeparatedByString:@" "];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] ANY %@", words];
但它不起作用。任何指导? 谢谢!
答案 0 :(得分:1)
这样做的另一种方式(我刚刚从你的问题中学到了这一点)就是使用子查询。有关详细信息,请查看此SO question
。您可以按以下方式使用子查询 -
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(%@, $str, SELF CONTAINS[cd] $str).@count != 0", words];
NSLog(@"%@", [array filteredArrayUsingPredicate:predicate]);
这似乎是有效的,因为我自己测试了它,但这也可能是奥术& Dave提到的模糊方式,因为它在谓词编程指南中没有提及。
可以找到SUBQUERY
的格式here
。它与您之前链接的问题中的链接相同。
答案 1 :(得分:0)
正如您在评论中提到的(正确),您可以通过构建复合谓词谓词来实现此目的,尽管您需要使用orPredicateWithSubpredicates
,而不是and
变体。
这真的是最好的方法。还有其他一些,但它们依赖于NSPredicate
的更加神秘和模糊的用法,我真的建议使用构建复合谓词路径。