【问题标题】:NSPredicate multiple field searchNSPredicate 多字段搜索
【发布时间】:2011-05-31 22:18:02
【问题描述】:

我正在尝试搜索多个字段。像这样的:

[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] %@"'

【问题讨论】:

    标签: iphone ios core-data nspredicate


    【解决方案1】:

    首先,您必须指定所有要检查的属性,因为没有固定或通用的属性列表,并且在 Objective-C 中,属性和任何其他方法之间没有真正的语义区别。

    其次,要检查多个属性以查看它们是否包含搜索字符串,您应该使用OR,而不是AND,因为如果任何属性匹配,则满足您的搜索,不是全部

    否则,您的语法似乎是正确的(我假设第一个子谓词中的 name title 只是 name。)

    【讨论】:

    • 我尝试了语法,但它在 OR 和 AND 下都崩溃了。名称和标题是一个错字。感谢您的回复。
    • 对于每个说明符序列(例如%@),您必须提供一个值,即使这些值相同。所以你需要在你的格式字符串之后有两次self.searchBar.text。此外,您需要关闭格式字符串中的第二个括号(即以) 结束它以平衡第二个()。
    【解决方案2】:

    不确定是否还有人阅读这篇文章,但我发现了你的问题。您在第二个谓词中缺少结束“)”。这是正确的代码:

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 2021-08-05
      • 2015-06-17
      • 2012-10-21
      • 2018-12-22
      相关资源
      最近更新 更多