3

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

文字列を検索すると、その文字列で始まる場合にのみ結果が見つかります。

レコードは「マイアートギャラリー

  • 「マイアートギャラリー」を検索<---見つかりました

  • 「私の」を検索<---見つかりました

  • 「アート」を検索<---見つかりません

  • 「ギャラリー」を検索<---見つかりません

上に示したように文字列の一部を見つけることができるようにコードを変更するにはどうすればよいですか?

4

2 に答える 2

12

私はNSRangeを使用することになり、基本的にサブストリングを検索できるようになりました。

for (Annotation *ano in listContent) {

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

    }
于 2011-01-24T23:22:21.787 に答える
6

部分文字列チェックを行う簡単な方法があります。

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 
}

注:私はこれをaで使用していますがUISearchDisplayController、これは完全に機能しました。

これが将来あなたに役立つことを願っています。

この投稿に感謝します(更新:このリンクはもう機能しません。)

于 2012-03-20T15:06:47.887 に答える