【问题标题】:how to sort iphone contact book?如何对iphone通讯录进行排序?
【发布时间】:2010-04-23 10:48:34
【问题描述】:

如何以编程方式按名字和姓氏对 iphone 通讯录进行排序(或检索排序数组)??

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

【问题讨论】:

    标签: iphone ios abaddressbook


    【解决方案1】:

    调用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);
    

    【讨论】:

      【解决方案2】:

      这个怎么样:--

      ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering
      

      ABPerson.h声明

      【讨论】:

      • 它将如何在 Swift 中使用?
      【解决方案3】:

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

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

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

      -凯文

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

      【讨论】:

      • 请同时添加此帖子的链接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      相关资源
      最近更新 更多