【问题标题】:NSPredicate - Return inexact matchesNSPredicate - 返回不精确的匹配
【发布时间】:2015-10-30 18:53:23
【问题描述】:

在我的应用中,我允许用户使用文本字段关键字搜索按品牌/型号搜索车辆。这是我的谓词:

if (self.keywordSearch.text.length > 0) {

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"fields.make CONTAINS[cd] %@ OR fields.model CONTAINS[cd] %@", self.keywordSearch.text, self.keywordSearch.text];            
     self.vehicleArray = [[self.vehicleArray filteredArrayUsingPredicate:predicate] mutableCopy];
}

问题在于,如果车辆品牌/型号是“福特 F-150”并且用户搜索 F150 或 F 150,则该车辆不包含在结果中。只有当他们搜索 F-150 或 f-150 时才会返回。

有没有办法确保返回这些不精确的匹配项?

【问题讨论】:

  • 当然有——但你必须清楚结果应该有多不精确——如果搜索是F150,类似... Fast 1 Big 5 Lalala 0 ... 的内容也会匹配吗?你有什么规则来指定匹配的不精确程度?
  • @luk2302 好吧,假设我只是想允许上述情况。所以,带连字符的 (f-150) 词...用户可以不包括连字符 (f150) 或放置一个空格而不是连字符 (f 150) ...该谓词看起来如何?

标签: ios objective-c nspredicate


【解决方案1】:

我建议为此使用正则表达式。您可以在 NSPredicate 格式中使用正则表达式文字(在此处描述:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html),也可以手动迭代数组并使用 NSRegularExpression 来比较字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-30
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多