Как оптимизировать результат поиска из адресной книги в iphone - PullRequest
0 голосов
/ 19 марта 2012

Когда пользователь ищет что-то вроде имени, номера телефона, адреса, адреса электронной почты, я хочу выполнить поиск по данным адресной книги.Мое решение работает нормально, но медленно.Если данные адресной книги огромны, приложение застревает.Как я могу оптимизировать поиск, чтобы мое приложение не зависало даже в больших данных адресной книги?

РЕДАКТИРОВАТЬ 1 Вот мой код

- (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];

        }

    }

}

Iпроверит, совпадает ли подстрока из поискового запроса с именем, фамилией, адресом электронной почты и т. д.Выше методы содержат логику для проверки наличия подстроки или нет?Если ti совпадает, я добавлю его в массив, иначе нет.

ДОЛЖЕН ЛИ Я ИСПОЛЬЗОВАТЬ РЕЗЬБУ ИЛИ GCD ДЛЯ ПЕРЕДАЧИ ПОИСКА?ЕСЛИ ДА, КАК?КАК МОЖНО ОБНОВИТЬ МОЙ СТОЛОВЫЙ ВИД?

1 Ответ

0 голосов
/ 19 марта 2012

У меня есть один, который может вам помочь

1. Получить все контакты

NSArray *thePeoples = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);

2. Создать другой массив (записи) из массива контактов (thePeoples)

records:{name:"abc", number:"123", url:"url", email:"email"}

3. Ищите mutableArray (records) с предикатом

NSPredicate * myPredicate = [NSPredicate predicateWithFormat:@"record.phoneNumber contains %@",string];

NSArray * filteredArray = [records filteredArrayUsingPredicate:myPredicate];

Надеюсь, это поможет вам

...