2012-02-17 4 views
0

検索コードに問題があります。私はsearchedDataと呼ばれるNSMutableArrayを持っていて、NSDictionaries(オブジェクトごとに1つ)を含んでいます。ここでは、検索コードは、私が今持っているのです。NSArrayのNSArray検索

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [tableData removeAllObjects]; // remove all data that belongs to previous search 
    if([searchText isEqualToString:@""]||searchText==nil) { 
     [tableView reloadData]; 
     return; 
    } 
    int i = 0; 
    while (i < [dataSource count]) { 
     NSDictionary *coolDict = [searchedData objectAtIndex:i]; 
     NSString * title = [coolDict objectForKey:@"TITLE"]; 
     NSString * authorString = [coolDict objectForKey:@"AUTHOR"]; 

     NSRange titleRange = [[title lowercaseString] rangeOfString:[searchText lowercaseString]]; 
     NSRange authorRange = [[authorString lowercaseString] rangeOfString:[searchText lowercaseString]]; 

     if (titleRange.location != NSNotFound || authorRange.location != NSNotFound) 
      [tableData addObject:title]; 
     i++; 
    } 

    [tableView reloadData]; 

} 

それは、その後、エントリ数を検出した各エントリになり、キー「TITLE」と「AUTHOR」のためのオブジェクトを検索し、その後のUITableViewのエントリを表示する場合がありますマッチです。

問題は、一致するものがあっても何も表示しないことです。 テーブル/ディクショナリがヌルではない(私はNSLoggedしています)ので、なぜ動作しているのか分かりません。

+0

'while'ループは' datasource'ごとにループしますが、代わりに 'searchedData'から値を引き出すのはなぜですか?それはタイプミスだったのでしょうか? –

+0

それらはお互いに鏡像しませんが、同じ量のオブジェクトを含みます。 –

+1

投稿者と本のタイトルが同じで、イベントが発生した場合は、あなたのtableViewで:didSelectRow:メソッド –

答えて

4

関連するデータを追加したtableViewをデータソースに再ロードするのを忘れました。

私は方法のコードを少し改善し、欠けている行を追加しました。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    [tableData removeAllObjects];// remove all data that belongs to previous search 
    if (![searchText isEqualToString:@""] || searchText != nil) { 
     int i = 0; 
     while (i < [dataSource count]) { 
      NSDictionary *coolDict = [searchedData objectAtIndex:i]; 
      NSString * title = [coolDict objectForKey:@"TITLE"]; 
      NSString * authorString = [coolDict objectForKey:@"AUTHOR"]; 

      NSRange titleRange = [[title lowercaseString] rangeOfString:[searchText lowercaseString]]; 
      NSRange authorRange = [[authorString lowercaseString] rangeOfString:[searchText lowercaseString]]; 

      if(titleRange.location != NSNotFound || authorRange.location != NSNotFound) 
       [tableData addObject:title]; 
      i++; 
     } 
    } 
    [tableView reloadData]; 
} 
+0

申し訳ありませんが、私は既に[tableView reloadData];ありがとう –