如何排序iPhone联系人?

时间:2010-04-23 10:48:34

标签: iphone ios abaddressbook

我如何按名字和名字排序(或检索已排序的数组)iphone联系簿。姓氏编程?

任何帮助都将受到赞赏......! 感谢

3 个答案:

答案 0 :(得分:26)

调用ABAddressBookCopyArrayOfAllPeople()以获取地址簿中所有人员记录的数组。然后按the documentation

  

要对一组人进行排序,请使用函数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);

答案 1 :(得分:7)

这个怎么样: -

ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering

ABPerson.h

中声明

答案 2 :(得分:4)

我使用上面的代码(来自批准的答案)从iPhone复制地址簿,并使用ABPersonComparePeopleByName对地址簿进行排序。但是当iPhone的国际语言不同时,发现同一个地址簿会有不同的排序结果。假设根据不同的标准对不同的语言进行排序是合理的。所以在我们的项目中我们有“en.lproj”..“zh-hant.lproj”...“ja.lproj”,在NSCalendar中,我们也有“locale”设置。所以我在考虑如何设置ABPersonComparePeopleByName的标准并询问Apple。一个非常有用的回复:“排序顺序不可预测”。

Apple的回复相关部分如下:

  

这实际上是正常行为。使用不同语言进行排序实际上是一个非常复杂的问题,用户的期望因语言/位置而异。老实说,您最好的选择是调整您的期望并假设排序顺序不可预测。任何其他方法都很可能会使许多国际用户感到烦恼和迷惑。

     

-Kevin

     

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