1

こんにちは、私は次のコードを使用して arrayTags 内の検索を正常に実行しました。ここで、arrayTags は「tag」という名前の各 XML 要素のフィールドの配列です。問題は、たとえば、タグに赤、白、青の 3 つの単語があるとします。「赤」または「白、青」、またはタグ要素に正確に含まれるものを検索すると、すべて問題ありません。しかし、「赤白」を検索しても何も返されません。実際には、arrayTags に含まれているものを正確に検索した場合にのみ検索結果が返されますが、連続していない単語は返されません。どうすればこの問題を解決できるか知っていますか? 本当にありがとう!

 - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{


     [resultArray removeAllObjects];

     NSString *cellTitle;
     for (cellTitle in arrayTags){

      NSString *stringa = cellTitle;
      NSRange range = [stringa rangeOfString:searchText];

      NSComparisonResult result = [cellTitle compare:searchText options:NSCaseInsensitiveSearch range:range];
      if (result == NSOrderedSame){

       int posizione = [arrayNames indexOfObjectIdenticalTo:cellTitle];

       [result Array addObject:[arrayNames objectAtIndex:posizione]];


      }
     }

     [self.tableView reloadData];
    }
4

1 に答える 1

0

問題には 2 つまたは 3 つの側面があります。

(1) 単語区切りとは何か、探している単語に属するものは何かを定義する必要があります。たとえば、「A, B」は「'A' と 'B' を探してください」という意味でも、「'A' と '_B' を探してください」という意味でもかまいません (undescore は空白を示します)。このような検索テキスト:

NSArray *listItems = [searchText componentsSeparatedByCharactersInSet:
                      [characterSetWithCharactersInString:@", "]];

おそらく、後で listItems オブジェクトから空白を削除し、listItems から空のオブジェクトを削除したいと思うでしょう。

(2) その後になって初めて、ステージ (1) で得たものを探す方法を決定できます。たとえば、listItems 内のすべてのオブジェクトを探す述語を作成します。

NSPredicate *inPredicate = [NSPredicate predicateWithFormat: @"SELF IN %@",
                           listItems];
NSArray* filteredArray = [arrayTags filteredArrayUsingPredicate:inPredicate];

この述語は大文字と小文字が区別されることに注意してください。そのため、他の要件については独自に作成してください。

(3)filteredArray はおそらくビュー クラスのメンバーである必要があり、新しい tableDataSource です。ただし、解決すべき微妙な点がいくつかあります。空の検索テキスト、データ ソースをフィルター処理されたコンテンツからフィルター処理されていないコンテンツに切り替えるなどです。

于 2010-05-04T12:29:24.187 に答える