NSPredicate多字段搜索

时间:2011-05-31 22:18:03

标签: iphone ios core-data 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] %@"'

2 个答案:

答案 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格式参数下工作正常(参见上面的代码)。当我添加第三个谓词和格式说明符(只有一个格式参数)时,它崩溃了。无论哪种方式,您应该始终具有相同数量的格式说明符和格式参数。