iPhone SDK – TableSearch – Search all words instead of only the first one. – Stack Overflow.からの抜粋メモ.

Appleの公開しているSample CodeであるTable Searchでリスト内検索をすると,入力した検索語と先頭からマッチする単語のみしか検索結果に出てこない点を解決するためのノウハウが書かれている.

TableSearchの使っているマッチング方法は,

NSComparisonResult result = [product.name compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];

で,これに対してresultがNSOrderedSameかどうかで判定するって方法。これだと先頭からのマッチ結果しか得られない.

これを解決するために,

  1. resultをNSRange型で宣言する
  2. NSStringをrangeOfString:options:で部分マッチングさせる
  3. resultをNSNotFoundで判定する

という方法で解決できますよ,ということみたいです.

NSRange result = [product.name rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];

自分は手探りでTableSearchを書き換えながら作っていたのでこの記事は助かった.少しずつ知識を蓄えてます :-)

FC2ブックマークへ追加 Bookmark this on Delicious このエントリーを含むはてなブックマークはてなブックマーク - UISearchBarの検索語を先頭マッチではなく部分マッチさせるtips