Не получается ожидаемое значение сравнения NSC - PullRequest
0 голосов
/ 02 января 2012

Я пытаюсь сделать фильтр, сравнивая значение ('stringToCompare'), которое есть в списке, и текст поиска, введенный пользователем ('searchText'). Фрагмент кода, как показано ниже.

NSComparisonResult result = [stringToCompare compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
NSLog(@"Search text: %@", searchText);
NSLog(@"string to compare: %@", stringToCompare);
NSLog(@"result: %i", result);
NSLog(@"NSOrderedsame: %i", NSOrderedSame);
if (result == NSOrderedSame)
{
   [self.filteredListContent addObject:genericObj];
}

Однако, как видно из результатов NSLog ниже, я не могу получить ожидаемый результат. В этом случае я ожидаю, что результатом будет '0', поскольку текст поиска 'Xot' может быть найден как часть 'stringToCompare'. Что мне здесь не хватает?

2012-01-02 05:13:59.184 onethingaday[5815:707] search text: Xot
2012-01-02 05:13:59.185 onethingaday[5815:707] string to compare: One exotic place you got laid in before. How was it?
2012-01-02 05:13:59.188 onethingaday[5815:707] result: -1
2012-01-02 05:13:59.188 onethingaday[5815:707] NSOrderedsame: 0

Ответы [ 2 ]

2 голосов
/ 02 января 2012

Вы сравниваете целые строки, не ища вхождения.Попробуйте это:

NSRange r = [stringToCompare rangeOfString:searchText
                             options:NSCaseInsensitiveSearch];

if ( r.location != NSNotFound )
{
    NSLog(@"String found at position: %d",r.location);
}
1 голос
/ 02 января 2012

-compare: не ищет подстроки, она сравнивает полную строку в диапазоне. Вы получаете ожидаемый результат, показывая вам, как строка «Xot» сравнивается с полной строкой «Одно экзотическое место, в котором вы лежали раньше. Как это было? '.

...