Как отсортировать контактную книгу iphone?

Как я могу сортировать (или получать отсортированный массив) контактную книгу iphone по имени и фамилии программным способом

Любая помощь будет хорошо оценена...! Благодаря

Ответы

Ответ 1

Вызвать ABAddressBookCopyArrayOfAllPeople(), чтобы получить массив всех записей человека в адресной книге. Затем следуйте документации:

Чтобы отсортировать массив людей, используйте функцию CFArraySortValues ​​с функцией ABPersonComparePeopleByName как компаратор и контекст типа ABPersonSortOrdering. Желаемый порядок сортировки пользователей, как было возвращено ABPersonGetSortOrdering, обычно является предпочтительным контекстом.

В следующем списке кодов показан пример сортировки всей базы данных адресной книги:

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(
                                          kCFAllocatorDefault,
                                          CFArrayGetCount(people),
                                          people
                                  );

 CFArraySortValues(
        peopleMutable,
        CFRangeMake(0, CFArrayGetCount(peopleMutable)),
        (CFComparatorFunction) ABPersonComparePeopleByName,
        (void*) ABPersonGetSortOrdering()
); 

CFRelease(addressBook);
CFRelease(people);
CFRelease(peopleMutable);

Ответ 2

Как насчет: -

ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering

объявленный в ABPerson.h

Ответ 3

Я использую приведенный выше код (из утвержденного ответа) для копирования адресной книги с iPhone, а также использовал ABPersonComparePeopleByName для сортировки адресной книги. Но обнаружил, что он будет иметь разные результаты сортировки для одной и той же адресной книги, когда международный язык iPhone отличается. Предположим, что разумно сортировать разные языки на основе разных критериев. Таким образом, в нашем проекте мы имеем "en.lproj".. "zh-hant.lproj"... "ja.lproj", In NSCalendar, у нас также есть настройка "locale". Поэтому я думаю, как установить критерии для ABPersonComparePeopleByName и попросить Apple. Очень полезный ответ: " порядок сортировки не предсказуем".

Соответствующая часть ответа Apple ниже:

Это нормальное поведение. Сортировка на разных языках на самом деле является невероятно сложной проблемой, когда ожидания пользователя сильно различаются в зависимости от языка/местоположения. Честно говоря, ваш лучший вариант - скорректировать ваши ожидания и предположить, что порядок сортировки не предсказуем. Любой другой подход, скорее всего, вызовет раздражение и запутает многих международных пользователей.

Кевин

Кевин Эллиот, инженер DTS, kevin_elliott @apple, com