how to sort iphone contact book?

落花浮王杯 提交于 2019-12-31 09:04:09

问题


How can i sort (or retrieve sorted array of ) an iphone contact book by first name & last name programmatically ??

Any help will be well appreciated...! Thanks


回答1:


Call ABAddressBookCopyArrayOfAllPeople() to get an array of all person records in the address book. Then follow the documentation:

To sort an array of people, use the function CFArraySortValues with the function ABPersonComparePeopleByName as the comparator and a context of the type ABPersonSortOrdering. The user’s desired sort order, as returned by ABPersonGetSortOrdering, is generally the preferred context.

The following code listing shows an example of sorting the entire Address Book database:

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:


How about this:--

ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering

declared in ABPerson.h




回答3:


I am using the above code (from the approved answer) to copy address book from iPhone, and also used ABPersonComparePeopleByName for sorting the address book.  But found that it
 will have different sorting results for the same address book, when the
 international language of the iPhone is different.  Suppose it is reasonable to sort different languages based on different criteria. So in our project we have "en.lproj".."zh-hant.lproj"..."ja.lproj", In NSCalendar, we also have "locale" setting. So I am thinking how to set the criteria for ABPersonComparePeopleByName and asked Apple. A very helpful reply: "a sort order is not predictable".

The relevant portion of Apple's reply is below:

This is actually normal behavior. Sorting in different languages is actually an incredibly complex issue where the expectation of the user vary widely depending on language/location. Honestly, your best option is to adjust your expectations and assume that the sort order is not predictable. Any other approach is very likely to annoy and confuse many international users.

-Kevin

Kevin Elliott, DTS Engineer, kevin_elliott@apple,com



来源:https://stackoverflow.com/questions/2697893/how-to-sort-iphone-contact-book

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!