Как я могу сортировать (или получать отсортированный массив) контактную книгу iphone по имени и фамилии программным способом
Любая помощь будет хорошо оценена...! Благодаря
Как я могу сортировать (или получать отсортированный массив) контактную книгу iphone по имени и фамилии программным способом
Любая помощь будет хорошо оценена...! Благодаря
Вызвать 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);
Как насчет: -
ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering
объявленный в ABPerson.h
Я использую приведенный выше код (из утвержденного ответа) для копирования адресной книги с iPhone, а также использовал ABPersonComparePeopleByName
для сортировки адресной книги. Но обнаружил, что он будет иметь разные результаты сортировки для одной и той же адресной книги, когда международный язык iPhone отличается. Предположим, что разумно сортировать разные языки на основе разных критериев. Таким образом, в нашем проекте мы имеем "en.lproj".. "zh-hant.lproj"... "ja.lproj", In NSCalendar
, у нас также есть настройка "locale". Поэтому я думаю, как установить критерии для ABPersonComparePeopleByName
и попросить Apple. Очень полезный ответ: " порядок сортировки не предсказуем".
Соответствующая часть ответа Apple ниже:
Это нормальное поведение. Сортировка на разных языках на самом деле является невероятно сложной проблемой, когда ожидания пользователя сильно различаются в зависимости от языка/местоположения. Честно говоря, ваш лучший вариант - скорректировать ваши ожидания и предположить, что порядок сортировки не предсказуем. Любой другой подход, скорее всего, вызовет раздражение и запутает многих международных пользователей.
Кевин
Кевин Эллиот, инженер DTS, kevin_elliott @apple, com