我如何通过程序按照名字和姓氏对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
中声明
ABPersonComparePeopleByName
对通讯录进行排序。但是,当iPhone的国际语言不同时,相同的通讯录将具有不同的排序结果。根据不同的语言以不同的标准进行排序是合理的。因此,在我们的项目中,我们有“en.lproj”..“zh-hant.lproj”..。“ja.lproj”,在NSCalendar
中,我们还有“locale”设置。所以我在思考如何为ABPersonComparePeopleByName
设置标准,并向Apple提问。非常有帮助的回复:“排序顺序是不可预测的”。