NSComparisonResult поиск части строки? - PullRequest
3 голосов
/ 25 января 2011

Я использую NSComparisonResult с моим SearchController:

for (Annotation *ano in listContent) {
        NSComparisonResult result = [ano.title compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
        if (result == NSOrderedSame) {
            [self.filteredListContent addObject:ano];
        }
    }

Если я ищу строку, она найдет результат только в том случае, если она начинается с этой строки.* Моя Галерея Искусств"

  • Поиск" Моя Галерея Искусств "<--- Найдено </p>

  • Поиск" Мой "<--- Найдено </p>

  • Поиск "Art" <--- Не найдено </p>

  • Поиск "Gallery" <--- Не найдено</p>

Как я могу изменить свой код, чтобы найти части строки, как я показал выше?

Ответы [ 2 ]

12 голосов
/ 25 января 2011

В итоге я использовал NSRange, что позволило мне в основном искать подстроку:

for (Annotation *ano in listContent) {

        NSRange range = [ano.title rangeOfString:searchText options:NSCaseInsensitiveSearch];
        if (range.location != NSNotFound) {
            [self.filteredListContent addObject:ano];
        }

    }
6 голосов
/ 20 марта 2012

Существует простой способ проверки подстроки:

NSComparisonResult result1 = [dummyString compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:[dummyString rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]];
if (result1 == NSOrderedSame)
{
 [self.filteredListContent addObject:dummyString];  // this can vary drastically 
}

ПРИМЕЧАНИЕ: я использую это с UISearchDisplayController, и это отлично сработало для меня.

Надеюсь, это поможет вам в будущем.

Благодаря этому сообщению (ОБНОВЛЕНИЕ: эта ссылка больше не работает.)

...