我正在尝试搜索多个字段。像这样:
[NSPredicate predicateWithFormat:@"(name title contains[cd] %@) AND (title contains[cd] %@", self.searchBar.text];
在名称字段或标题字段上进行搜索。
另外,如果有人知道通配符搜索会是什么样子,我也会很感激。
我试过了:
[NSPredicate predicateWithFormat:@"* contains[cd] %@", self.searchBar.text];
我的错误代码:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "(name contains[cd] %@) OR (title contains[cd] %@"'
答案 0 :(得分:1)
首先,您必须指定要检查的所有属性,因为没有固定或通用的属性列表,并且在Objective-C中,属性和任何其他方法之间没有真正的语义区别。
其次,要检查多个属性以查看它们是否包含搜索字符串,您应该使用OR
,而不是AND
,因为如果任何属性匹配,而不是所有。
否则,您的语法看起来是正确的(我假设第一个子预测中的name title
只是name
。)
答案 1 :(得分:0)
不确定是否有人仍在阅读此帖,但我发现了您的问题。你在第二个谓词中缺少一个结束“)”。这是正确的代码:
[NSPredicate predicateWithFormat:@"(name title contains[cd] %@) AND (title contains[cd] %@)", self.searchBar.text];
编辑:经过测试,我注意到两个格式说明符在ONE格式参数下工作正常(参见上面的代码)。当我添加第三个谓词和格式说明符(只有一个格式参数)时,它崩溃了。无论哪种方式,您应该始终具有相同数量的格式说明符和格式参数。