【问题标题】:How to sort ABAddressBook contact through First Name如何通过名字对 ABAddressBook 联系人进行排序
【发布时间】:2013-08-08 07:02:25
【问题描述】:

我有一个按姓氏对通讯簿进行排序的排序功能,我需要修改此代码,使其按名字排序。我需要在哪里更改此代码。我知道这是一个简单的更改,但我无法弄清楚。这是按姓氏对联系人列表进行排序的代码

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy
                                       (
                                          kCFAllocatorDefault,
                                          CFArrayGetCount(people),
                                          people
                                       );


CFArraySortValues
       (
        peopleMutable,
        CFRangeMake(0, CFArrayGetCount(peopleMutable)),
        (CFComparatorFunction) ABPersonComparePeopleByName,
        (void*) ABPersonGetSortOrdering()
       );

【问题讨论】:

    标签: ios objective-c sorting abaddressbook


    【解决方案1】:

    通过下面的kABPersonSortByFirstName 而不是(void*) ABPersonGetSortOrdering() 来实现您的排序方法:-

    CFArraySortValues(peopleMutable,
                      CFRangeMake(0, CFArrayGetCount(peopleMutable)),
                      (CFComparatorFunction) ABPersonComparePeopleByName,
                      kABPersonSortByFirstName);
    

    归功于this

    【讨论】:

    • 谢谢这似乎有效,我想知道为什么我之前在堆栈溢出中搜索它时没有找到那个页面,而且我确实用 kABPersonSortByLastName 尝试过它并显示错误所以我没有费心尝试另一个一:P
    【解决方案2】:

    试试这个

     ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
        addressBookArray = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByLastName);
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      您可以使用此代码对它们进行排序,如果您想使用相同的代码,请查看 Nitin 的回答:-

              ABRecordRef person = (__bridge ABRecordRef)record;
      
              NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
      
              if ( [beginsPredicate evaluateWithObject:firstName] )
              {
                  ABRecordID abRecordID = ABRecordGetRecordID(person);
      
                  [self.filteredPeople addObject:[NSNumber numberWithInt:abRecordID]];
              }
      

      希望它对你有用。

      【讨论】:

        【解决方案4】:

        这对我有用:

         //Sorting
        
         ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
                    ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
                    NSArray *allPeople = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多