如何sortingiPhone通讯录?

我如何sorting(或检索sorting的数组)一个iPhone通讯录的名字和姓氏编程?

任何帮助将不胜感激…! 谢谢

调用ABAddressBookCopyArrayOfAllPeople()获取地址簿中所有人员logging的数组。 然后按照文档 :

要对一个数组进行sorting,请使用函数CFArraySortValues,函数ABPersonComparePeopleByName作为比较器,并使用ABPersonSortOrderingtypes的上下文。 用户希望的sorting顺序,由ABPersonGetSortOrdering返回,通常是首选的上下文。

下面的代码清单显示了对整个地址簿数据库进行sorting的示例:

 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复制通讯簿,还使用ABPersonComparePeopleByNamesorting通讯簿。 但发现当iPhone的国际语言不同时,同一地址簿的sorting结果会有所不同。 假设根据不同的标准对不同的语言进行sorting是合理的。 所以在我们的项目中,我们有“en.lproj”..“zh-hant.lproj”…“ja.lproj”,在NSCalendar ,我们也有“locale”设置。 所以我想如何设置ABPersonComparePeopleByName的标准,并问苹果。 一个非常有用的答复:“ sorting是不可预测的 ”。

苹果回复的相关部分如下:

这实际上是正常的行为。 用不同的语言sorting实际上是一个非常复杂的问题,用户的期望根据语言/位置而变化很大。 老实说,你最好的select是调整你的期望,并假定sorting是不可预测的。 任何其他的方法很可能会惹恼和混淆许多国际用户。

-Kevin

DTS工程师Kevin Elliott,kevin_elliott @ apple,com