Привет, у меня есть код jquery, который
var src = data.split(',');
jQuery("#stationFrom").autocomplete({
source: function( request, response ) {
var matcher = new RegExp( "\\b" + jQuery.ui.autocomplete.escapeRegex( request.term ), "i" );
response( jQuery.grep( src, function( item ){
return matcher.test( item );
}) );
},
Это, в основном, автозаполнение текстового поля. Я пытаюсь подражать тому же в Objective-C, используя NSPredicate. Я попробовал запрос
NSArray *filteredArray = [possibleTerms filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains[cd] %@", inputString]];
return filteredArray;
Но это не возвращает те же результаты, что и сценарий автозаполнения jquery выше. Как я могу исправить предикатный запрос, чтобы он соответствовал jQuery.
Есть лучший способ сделать это?
"MATCHES" в предикате соответствует регулярному выражению (и "[c]" относится к нечувствительности к регистру), поэтому это должно быть похоже на ваш код jQuery:
NSString *pattern = [NSString stringWithFormat:@".*\\b%@.*", [NSRegularExpression escapedPatternForString:term]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self MATCHES[c] %@", pattern];
NSArray *filteredArray = [possibleTerms filteredArrayUsingPredicate:predicate];
Если вы хотите получить все строки в массиве, которые начинаются с данного термина, вы можете использовать более простой предикат
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self BEGINSWITH[c] %@", term];
.*
в шаблон.