Когда пользователь выполняет поиск, я хочу выполнить поиск по данным адресной книги, например, имя, номер телефона, URL, адрес электронной почты.Мое решение работает нормально, но медленно.Если данные адресной книги огромны, приложение застревает.Как я могу оптимизировать поиск, чтобы мое приложение не зависало даже в больших данных адресной книги?
Вот мой код
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self takeSomeActionWhenTextChange];
}
-(void)takeSomeActionWhenTextChange{
[contactArray removeAllObjects];
NSString *searchText=[[textSearchBar text] lowercaseString];
for (int index=0; index<count; index++) {
ABRecordRef record=CFArrayGetValueAtIndex(people, index);
//[self checkStringISAddress:searchText withRecord:record];
if ([self checkStringIsFirstName:searchText withRecord:record]==YES
|| [self checkStringIsLastName:searchText withRecord:record] == YES
||[self checkStringIsNote:searchText withRecord:record]==YES
|| [self checkStringIsAddress:searchText withRecord:record]==YES
|| [self checkStringIsCompany:searchText withRecord:record]==YES
||[self checkStringIsEmail:searchText withRecord:record]
||[self checkStringIsPhonenumber:searchText withRecord:record]==YES )
{
NSLog(@"object added inside Array");
[contactArray addObject:record];
[contactTableView reloadData];
}else{
NSLog(@"No Match For this object");
[contactTableView reloadData];
}
}
}
Я проверю, совпадает ли подстрока из поискового запросас именем, фамилией, адресом электронной почты и так далее.Выше методы содержат логику для проверки наличия подстроки или нет?Если ti совпадает, я добавлю его в массив, иначе нет.
ДОЛЖЕН ЛИ Я ИСПОЛЬЗОВАТЬ РЕЗЬБУ ИЛИ GCD ДЛЯ ПЕРЕДАЧИ ПОИСКА?ЕСЛИ ДА, КАК?КАК Я МОГУ ОБНОВИТЬ МОЙ СТОЛОВЫЙ ВИД?