NSPredicate - 返回不精确的匹配
Posted
技术标签:
【中文标题】NSPredicate - 返回不精确的匹配【英文标题】:NSPredicate - Return inexact matches 【发布时间】: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) ...该谓词看起来如何?
【参考方案1】:
我建议为此使用正则表达式。您可以在 NSPredicate 格式中使用正则表达式文字(在此处描述:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html),也可以手动迭代数组并使用 NSRegularExpression 来比较字符串。
【讨论】:
以上是关于NSPredicate - 返回不精确的匹配的主要内容,如果未能解决你的问题,请参考以下文章
IOS / Objective-C:核心数据NSPredicate使用IN不返回所有匹配
带有 NSPredicate 的 Fetchrequest 不返回正确的值
NSPredicate ANY 只返回与字符串列表中第一个元素的关键字匹配的记录