Получите результаты автозаполнения jQuery, используя NSPredicate в Objective-C

0

Привет, у меня есть код 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.

Есть лучший способ сделать это?

Теги:
autocomplete
nspredicate

1 ответ

2
Лучший ответ

"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];
  • 0
    Это не похоже на строку, с которой я тестирую. Мой массив содержит строку «DELHI (DLI)», но когда я передаю строку термина «DLI», этот предикат не соответствует ей, в то время как jquery выше.
  • 0
    @tbag: ты можешь попробовать еще раз? Я добавил еще один .* в шаблон.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню