我有一个包含 3000 多个条目的表,搜索速度非常慢。
目前我所做的就像在“TableSearch”示例代码中一样(但没有范围)
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
[self filterContentForSearchText: searchString];
// Return YES to cause the search result table view to be reloaded.
return YES;
}
而filterContentForSearchText方法如下:
- (void) filterContentForSearchText:(NSString*)searchText
{
// Update the filtered array based on the search text
// First clear the filtered array.
[filteredListContent removeAllObjects];
// Search the main list whose name matches searchText
// add items that match to the filtered array.
if (fetchedResultsController.fetchedObjects)
{
for (id object in fetchedResultsController.fetchedObjects)
{
NSString* searchTarget = [tableTypeDelegate getStringForSearchFilteringFromObject:object];
if ([searchTarget rangeOfString:searchText
options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)].location != NSNotFound)
{
[filteredListContent addObject:object];
}
}
}
}
我的问题是双重的:
- 如何使搜索过程更快?
- 如何阻止搜索阻塞主线程?即停止它阻止用户输入更多字符。
对于第二部分,我尝试了“performSelector:withObject:afterDelay:”和“cancelPreviousPerformRequests ...”但没有取得多大成功。我怀疑我需要改用线程,但我没有太多经验。