Поиск адресной книги
Можно быстро искать адресную книгу пользователя, использование произвольно объединяет критерии. Например, можно искать всех людей по имени Смит, или для всех людей, работающих в Высшей точке и живой в Сан-Франциско, или для всех людей, работающих в Ajax и живой в Сиэтле.
Для выполнения поиска Вы инкапсулируете критерии в поисковом элементе для передачи его платформе Адресной книги. Платформа выполняет поиск от Вашего имени и возвращает результаты. Разрешение платформе обработать поиск может привести к значительным выигрышам в производительности по сравнению с выполнением поиска в Вашем приложении, потому что платформа знает о низкоуровневом расположении базовой базы данных, и это может оптимизировать доступ к диску соответственно.
Создание поискового элемента для единственного свойства
Для создания поискового элемента для лица используйте ABPerson
метод класса searchElementForProperty:label:key:value:comparison:
. Для создания поискового элемента для группы используйте ABGroup
метод класса searchElementForProperty:label:key:value:comparison:
.
Если Вы хотите искать людей или группы, имеющие определенный набор свойств, независимо от значения, оно установлено в, передача nil
как значение и kABNotEqual
как сравнение. Искать людей или группы, не имеющие набора свойств, передачи nil
как значение и kABEqual
как сравнение.
Создание поискового элемента для многократных свойств
Для объединения поисковых элементов используйте ABSearchElement
метод класса searchElementForConjunction:children:
. Этот метод берет два параметра:
conjunctionOperator описывает, как объединить поисковые элементы. Это может быть
kABSearchAnd
илиkABSearchOr
.дочерние элементы являются NSArray поисковых элементов. Поисковые элементы могут быть простыми элементами, который указывает только одно свойство или сложные элементы, который указывает несколько. Это позволяет Вам создать произвольно сложные поисковые элементы. Вы не можете объединить поисковые элементы для групп с поисковыми элементами для людей.
Нахождение записей, соответствующих поисковый элемент
Для поиска адресной книги записи, соответствующие поисковый элемент используйте ABAddressBook
метод recordsMatchingSearchElement:
, который возвращается NSArray
из записей. Используйте ABSearchElement
метод matchesRecord:
протестировать, соответствует ли определенная запись запрос.
Поисковые примеры
Перечисление 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
метка — мы только хотим знать, живут ли они в городе, мы ищем, не, если они работают в том же городе.
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]; |