2011-05-31 92 views
3

我试图搜索多个字段。例如: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] %@"' 

回答

1

首先,你必须指定所有属性来检查,因为没有物业没有固定的或普遍的名单,并在Objective-C在属性和任何其他方法之间没有真正的语义区别。

第二关,检查多个属性,看看它们是否包含搜索字符串,你应该使用OR,不AND,因为搜索是满意的,如果性质的任何匹配,不所有

否则,您必须语法正确出现(我在第一subpredicate假设name title,就是要公正name

+0

我试过了这个语法,它和OR和AND都崩溃了。名称和标题是一个错字。感谢您的答复。 – hanumanDev 2011-05-31 22:27:51

+0

对于每个说明符序列(例如'%@'),即使值相同,也必须提供一个值。所以你需要在你的格式字符串后面加上'self.searchBar.text'两次。此外,您需要关闭格式字符串中的第二个括号(即用')结束以平衡第二个(')。 – 2011-06-01 14:43:57

0

不知道是否还有人读这篇文章,但我发现你的问题。你在第二个谓词中缺少结尾“)”。下面是正确的代码:

[NSPredicate predicateWithFormat:@"(name title contains[cd] %@) AND (title contains[cd] %@)", self.searchBar.text]; 

编辑:测试此之后,我注意到有两个格式说明工作正常使用一种格式参数(见上面的代码)。当我添加第三个谓词和格式说明符(只有一个格式参数)时,它崩溃了。无论如何,您应该始终拥有相同数量的格式说明符和格式参数。