我正在实现一个根据用户输入的文本过滤 UITableView 的搜索字段。
TableView 是由一个包含 NSStrings(要显示和搜索的数据)的数组构建的,并且可能包含6000 多个项目。
当用户开始搜索时,我正在实现该-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
方法。
我的代码可以工作,但是,当数据数组很大时,它会非常慢并且会造成非常糟糕的用户体验(我的 iPhone 4s 卡住了好几秒钟)。
我实现搜索的方式(在上面提到的方法中)是这样的:
NSMutableArray *discardedItems = [[NSMutableArray alloc] init]; // Items to be removed
searchResultsArray = [[NSMutableArray alloc] initWithArray:containerArray]; // The array that holds all the data
// Search for matching results
for (int i=0; i<[searchResultsArray count]; i++) {
NSString *data = [[containerArray objectAtIndex:i] lowercaseString];
NSRange r = [data rangeOfString:searchText];
if (r.location == NSNotFound) {
// Mark the items to be removed
[discardedItems addObject:[searchResultsArray objectAtIndex:i]];
}
}
// update the display array
[searchResultsArray removeObjectsInArray:discardedItems];
[myTableView reloadData];
我不认为循环一个包含几千个项目的数组会导致任何问题......
任何建议都将不胜感激!
更新 我刚刚意识到大部分时间是这样的:
[searchResultsArray removeObjectsInArray:discardedItems];