2011-01-24 1 views
3

Я использую NSComparisonResult с моим SearchController:NSComparisonResult поиск части строки?

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

Если я искать строку будет найти только результат, если он начинается с этой строкой.

Запись является "My Art Gallery"

  • Поиск "My Art Gallery" < --- Найдено

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

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

  • Поиск «Галерея» < --- Не найдено

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

ответ

12

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

for (Annotation *ano in listContent) { 

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

    } 
5

Существует прямой вперед способ сделать проверку подстроки:

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, и это отлично сработало для меня.

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

this post (UPDATE: ссылка не работает.)