如何解决NSPredicate多字段搜索
| 我正在尝试搜索多个字段。像这样:[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] %@\"\'
解决方法
首先,必须指定要检查的所有属性,因为没有固定或通用的属性列表,并且在Objective-C中,属性与任何其他方法之间没有真正的语义区别。
其次,要检查多个属性以查看它们是否包含搜索字符串,应使用
OR
而不是AND
,因为如果任何一个属性(而不是全部)都匹配,则满足搜索条件。
否则,您显示的语法就正确了(我假设第一个子谓词中的name title
只是name
。)
, 不知道是否有人还会读这篇文章,但我发现了您的问题。您在第二个谓词中缺少结尾的\“)\”。这是正确的代码:
[NSPredicate predicateWithFormat:@\"(name title contains[cd] %@) AND (title contains[cd] %@)\",self.searchBar.text];
编辑:经过测试,我注意到两个格式说明符可以与ONE格式参数一起正常工作(请参见上面的代码)。当我添加第三个谓词和格式说明符(仅带有一个format参数)时,它崩溃了。无论哪种方式,您都应始终具有相同数量的格式说明符和格式参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。