Поиск адресной книги

Можно быстро искать адресную книгу пользователя, использование произвольно объединяет критерии. Например, можно искать всех людей по имени Смит, или для всех людей, работающих в Высшей точке и живой в Сан-Франциско, или для всех людей, работающих в Ajax и живой в Сиэтле.

Для выполнения поиска Вы инкапсулируете критерии в поисковом элементе для передачи его платформе Адресной книги. Платформа выполняет поиск от Вашего имени и возвращает результаты. Разрешение платформе обработать поиск может привести к значительным выигрышам в производительности по сравнению с выполнением поиска в Вашем приложении, потому что платформа знает о низкоуровневом расположении базовой базы данных, и это может оптимизировать доступ к диску соответственно.

Создание поискового элемента для единственного свойства

Для создания поискового элемента для лица используйте ABPerson метод класса searchElementForProperty:label:key:value:comparison:. Для создания поискового элемента для группы используйте ABGroup метод класса searchElementForProperty:label:key:value:comparison:.

Если Вы хотите искать людей или группы, имеющие определенный набор свойств, независимо от значения, оно установлено в, передача nil как значение и kABNotEqual как сравнение. Искать людей или группы, не имеющие набора свойств, передачи nil как значение и kABEqual как сравнение.

Создание поискового элемента для многократных свойств

Для объединения поисковых элементов используйте ABSearchElement метод класса searchElementForConjunction:children:. Этот метод берет два параметра:

Нахождение записей, соответствующих поисковый элемент

Для поиска адресной книги записи, соответствующие поисковый элемент используйте ABAddressBook метод recordsMatchingSearchElement:, который возвращается NSArray из записей. Используйте ABSearchElement метод matchesRecord: протестировать, соответствует ли определенная запись запрос.

Поисковые примеры

Перечисление 1 показывает код для нахождения всех, фамилией которых является Смит.

Перечисление 1  простой поиск

ABAddressBook *AB = [ABAddressBook sharedAddressBook];
ABSearchElement *nameIsSmith =
    [ABPerson searchElementForProperty:kABLastNameProperty
                                 label:nil
                                   key:nil
                                 value:@"Smith"
                            comparison:kABEqualCaseInsensitive];
NSArray *peopleFound =
    [AB recordsMatchingSearchElement:nameIsSmith];

Перечисление 2 показывает код для нахождения всех, кто живет в Сан-Франциско и работает на Высшую точку, или кто живет в Сиэтле и работает на Ajax. Обратите внимание на то, что адреса ищутся с помощью kABHomeLabel метка — мы только хотим знать, живут ли они в городе, мы ищем, не, если они работают в том же городе.

Перечисление 2  сложный поиск

ABAddressBook *AB = [ABAddressBook sharedAddressBook];
ABSearchElement *inSF =
    [ABPerson searchElementForProperty:kABAddressProperty
                                 label:kABHomeLabel
                                   key:kABAddressCityKey
                                 value:@"San Francisco"
                            comparison:kABEqualCaseInsensitive];
ABSearchElement *atAcme =
    [ABPerson searchElementForProperty:kABOrganizationProperty
                                 label:nil
                                   key:nil
                                 value:@"Acme"
                            comparison:kABContainsSubStringCaseInsensitive];
ABSearchElement *inSeattle =
    [ABPerson searchElementForProperty:kABAddressProperty
                                 label:kABHomeLabel
                                   key:kABAddressCityKey
                                 value:@"Seattle"
                            comparison:kABEqualCaseInsensitive];
ABSearchElement *atAjax =
    [ABPerson searchElementForProperty:kABOrganizationProperty
                                 label:nil
                                   key:nil
                                 value:@"Ajax"
                            comparison:kABContainsSubStringCaseInsensitive];
ABSearchElement *inSFAndAtAcme =
    [ABSearchElement searchElementForConjunction:kABSearchAnd
                                        children:[NSArray arrayWithObjects:
                                            inSF, atAcme, nil]];
ABSearchElement *inSeattleAndAtAjax =
    [ABSearchElement searchElementForConjunction:kABSearchAnd
                                        children:[NSArray arrayWithObjects:
                                            inSeattle, atAjax, nil]];
ABSearchElement *inSFAndAtAcmeOrInSeattleAndAtAjax =
    [ABSearchElement searchElementForConjunction:kABSearchOr
                                        children:[NSArray arrayWithObjects:
                                            inSFAndAtAcme, inSeattleAndAtAjax, nil]];
NSArray *peopleFound =
    [AB recordsMatchingSearchElement:inSFAndAtAcmeOrInSeattleAndAtAjax];