UITableView / UISearchBar 返回不正确的结果

Posted

技术标签:

【中文标题】UITableView / UISearchBar 返回不正确的结果【英文标题】:UITableView / UISearchBar Returns Incorrect Results 【发布时间】:2011-03-08 11:55:54 【问题描述】:

我正在尝试在 UITableView 中实现搜索。搜索时,似乎返回了正确数量的结果,但我从结果中的原始故事数组中接收条目,而不是 searchResults。我可以看到 searchResults 数组应该是数据源,但是经过大量搜索后,我无法弄清楚如何使用 NSDictionaries 数组来实现它。任何帮助表示赞赏。

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

【问题讨论】:

【参考方案1】:

[tableView isEqual:self.searchDisplayController.searchResultsTableView] 也是创建和管理自己的BOOL isFiltering; 变量的另一种选择

【讨论】:

【参考方案2】:

使用 NSPredicate 进行过滤

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

假设您的原始数组是“originalArray”,因此要获得过滤后的数组,请使用这两个全局变量

 NSArray* filteredArray;
 BOOL isFiltering;

现在在搜索栏委托方法中执行以下操作

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

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

现在您需要更改您的表格视图委托和数据源,...对于您正在使用的所有地方

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

使用关注

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

【讨论】:

以上是关于UITableView / UISearchBar 返回不正确的结果的主要内容,如果未能解决你的问题,请参考以下文章

禁用添加到 UITableView 的 UISearchbar 的滚动

uisearchbar + uitableview + nsfetchedresultscontroller

UISearchBar 上方的 UITableView 部分

UISearchBar 未设置为 UITableView.tableHeaderView

无法与 UITableView 中的 UISearchBar 交互

在 UITableView 中激活时调整 UISearchBar