2015-10-30 5 views
0

В моем приложении я разрешаю пользователям искать автомобили по марке/модели, используя поиск по ключевым словам в текстовом поле. Вот мой предикат:NSPredicate - Возврат неточных совпадений

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]; 
} 

Проблема заключается в том, что если Vehicle марка/модель «Ford F150» и пользователь ищет F150 или F 150, транспортное средство не включены в результаты. Он возвращается только при поиске F-150 или f-150.

Есть ли способ убедиться, что эти неточные соответствия возвращаются?

+2

конечно есть - но вы должны понять, как неточно результат должен быть - если поиск 'F150' будет что-то вроде' ... Fast 1 Big 5 Lalala 0 ... 'также совпадать? Каково ваше * правило *, чтобы указать, насколько неточным может быть совпадение? – luk2302

+0

@ luk2302 ok, скажем, я просто хотел разрешить вышеупомянутый случай. поэтому, дефис (f-150) слова ... пользователь может либо не включать дефис (f150), либо разместить пробел вместо дефиса (f 150) ... как бы этот предикат выглядел? –

ответ

0

Предлагаю использовать для этого регулярные выражения. Вы можете использовать литерал регулярных выражений внутри формата NSPredicate (описанный здесь: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html), или вы можете выполнить итерацию массива вручную и использовать NSRegularExpression для сравнения строк.

Смежные вопросы