【问题标题】:Coredata fetch request using NSPredicate使用 NSPredicate 的 Coredata 获取请求
【发布时间】:2016-07-19 11:35:33
【问题描述】:

我想在 sqlite db 中进行电话号码搜索。电话表有一个数字字段,其中包含一个字符串值(例如:+1 (2-34)56-78 )。

如果用户输入搜索文本为“234”,那么我需要使用NSPredicate 获取仅包含数字的电话号码(消除存储的字符串中的所有其他字母或特殊字符)并将其与输入的字符串进行比较。我应该在获取请求中使用谓词吗?

我尝试了以下谓词,但它没有返回预期的结果:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"contactName != null AND SUBQUERY(phoneList, $phone, ANY $phone.number CONTAINS[c] %@).@count > 0",searchText];

有什么办法可以做到这一点吗?我可以为此使用带有NSPredicate 的正则表达式吗?

【问题讨论】:

  • 电话有一个号码还是号码是一对多的关系?
  • 电话表有两个字段:号码和标签。一个联系人可以有多个电话号码。所以这里的“phoneList”是联系人与电话表的多重关系。我正在尝试使用搜索字符串作为电话号码来获取联系人。
  • SUBQUERY 和 ANY 都在处理一对多关系。尝试格式"contactName != null AND ANY phoneList.number CONTAINS[c] %@", searchText
  • 谢谢。我纠正了它。但是这样做并没有在结果列表中显示带有特殊字符的电话号码。我需要从列值中删除特殊字符并仅与数字进行比较。
  • 您可以使用MATCHES 和正则表达式。

标签: core-data fetch


【解决方案1】:

NSPredicate 不支持这种匹配。你的核心数据模型应该包含你的应用过滤所需的数据——这可能意味着用户通常不可见的额外字段。如果您需要匹配数字而不考虑非数字字符,您应该添加一个包含该数据的字段。如果实际字符串是+1 (2-34)56-78,则在您存储12345678 的位置添加一个辅助字段。在谓词中使用这个额外的字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多