У меня есть таблица с более чем 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];
}
}
}
}
У меня двоякий вопрос:
- Как мне ускорить процесс поиска?
- Как я могу помешать поиску заблокировать основной поток? то есть остановите его, не позволяя пользователю вводить больше символов.
Во второй части я без особого успеха попробовал «executeSelector: withObject: afterDelay:» и «cancelPreviousPerformRequests ...». Я подозреваю, что мне нужно будет вместо этого использовать многопоточность, но у меня нет большого опыта с этим.