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];
}
}
}
}
私の質問は2つあります:
- 検索プロセスを高速化するにはどうすればよいですか?
- 検索がメインスレッドをブロックしないようにするにはどうすればよいですか?つまり、ユーザーがそれ以上文字を入力できないように停止します。
2番目の部分では、「performSelector:withObject:afterDelay:」と「cancelPreviousPerformRequests ...」を試しましたが、あまり成功しませんでした。代わりにスレッドを使用する必要があると思いますが、あまり経験がありません。