嘿伙计们,我有一段动态搜索的UISearchBar代码。但是由于DataSource是一个非常大的NSArray,搜索过程有一个烦人的滞后,我需要/必须/必须摆脱。
问题是我无法找到一种方法以非动态的方式进行搜索,就像用户输入搜索字符串一样,只有在点击键盘上的搜索按钮后,搜索过程才会出现结果。
我的代码如下:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if (searchText.length == 0) {
isFiltered = NO;
} else {
isFiltered = YES;
filteredCodigos = [[NSMutableArray alloc] init];
for (NSDictionary *item in values) {
NSString *strSymbol = [item objectForKey:@"symbol"];
NSString *strName = [item objectForKey:@"name"];
NSRange strRangeSymbol = [strSymbol rangeOfString:searchText options:NSCaseInsensitiveSearch];
NSRange strRangeName = [strName rangeOfString:searchText options:NSCaseInsensitiveSearch];
if ((strRangeSymbol.location != NSNotFound) || (strRangeName.location != NSNotFound)) {
[filteredCodigos addObject:item];
}
}
}
[_tableView reloadData];
}
答案 0 :(得分:1)
您可以使用searchBarSearchButtonClicked:
搜索栏委托方法来触发搜索,而不是searchBar:textDidChange:
。
如果使用searchBar:textDidChange:
,您还可以在执行搜索之前要求搜索字符串的长度至少为2或3个字符。
您可能还应该考虑更改数据源,而不是使用数组,而是使用Core Data(或类似数据)。因此,您不需要同时处理内存中的所有内容,因此您可以进行有效的搜索。