我正在尝试在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];
}
}
}
}
答案 0 :(得分:1)
[tableView isEqual:self.searchDisplayController.searchResultsTableView]
也是制作和管理自己的BOOL isFiltering;
变量
答案 1 :(得分:0)
使用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];