как отсортировать книгу контактов iphone? - PullRequest
14 голосов
/ 23 апреля 2010

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

Любая помощь будет оценена по достоинству ...! Спасибо

Ответы [ 3 ]

26 голосов
/ 23 апреля 2010

Позвоните 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);
7 голосов
/ 06 августа 2010

Как насчет этого: -

ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering

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

4 голосов
/ 20 октября 2012

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

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

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

-Kevin

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

...