2011-03-08 3 views
0

UITableViewで検索を実装しようとしています。検索すると正しい数の結果が返されたように見えますが、searchResultsではなく、結果の元の記事配列からエントリを受け取ります。 searchResults配列はデータソースでなければならないが、NSDictionariesの配列を使って検索する方法がかなり見つかったわけではない。どんな助けもありがとうございます。UITableView/UISearchBarが不正な結果を返します

- (void)handleSearchForTerm:(NSString *)searchTerm { 
[self setSavedSearchTerm:searchTerm]; 

if ([self searchResults] == nil) 
{ 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    [self setSearchResults:array]; 
    [array release], array = nil; 
} 

[[self searchResults] removeAllObjects];  

if ([[self savedSearchTerm] length] != 0) 
{ 

    for (NSDictionary *currentItem in [self stories]) 
    { 
     if ([[currentItem objectForKey:@"title"] rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location != NSNotFound) 
     { 
      [[self searchResults] addObject:currentItem]; 
     } 
    } 
} 

}

答えて

0

フィルタアレイは、これは、さらに2つのグローバル変数

NSArray* filteredArray; 
BOOL isFiltering; 
を作る使用取得するので、あなたの元の配列は "originalArray" であると仮定し

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self.title MATCHES %@",searchTerm]; 

をフィルタリングするために使用NSPredicate

検索バーデリゲートメソッドで次の操作を実行します

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
     NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self.title MATCHES %@",searchTerm]; 
     filteredArray = [[originalArray filteredArrayUsingPredicate:predicate] retain]; 
} 

今、あなたは少しあなたのテーブルビューのデリゲートとデータソースっ、......あなたは

NSDictionary *currentString; 
if(isFiltering) 
     currentString = [originalArray objectAtIndex:indexPath.row]; 
else 
     currentString = [filteredArray objectAtIndex:indexPath.row]; 
+0

ありがとうございました。私は見てみましょう。 – voodoobilly

1

NSDictionary *currentString = [originalArray objectAtIndex:indexPath.row]; 

使用を使用しているすべての場所のためのL'を変更する必要があります

[tableView isEqual:self.searchDisplayController.searchResultsTableView]は、独自のBOOL isFiltering;変数を作成して管理する別の方法です。