2013-08-08 30 views
5

Tôi có chức năng sắp xếp sắp xếp Sổ địa chỉ theo Họ, tôi cần sửa đổi mã này để mã sẽ sắp xếp theo Tên. Tôi cần thay đổi mã này ở đâu. Tôi biết nó là một sự thay đổi đơn giản nhưng tôi không thể tìm ra nó. Đây là mã mà sắp xếp các danh sách địa chỉ liên lạc bởi cuối TênCách sắp xếp số liên lạc ABAddressBook qua First Name

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


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

Trả lời

8

Thực hiện cách sắp xếp của bạn bằng cách dưới đây đưa kABPersonSortByFirstName thay vì (void*) ABPersonGetSortOrdering(): -

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

tín dụng đi vào this

+0

Cảm ơn điều đó dường như làm việc, tôi tự hỏi tại sao mình lại không tìm thấy trang đó khi tôi tìm kiếm nó trong stack overflow trước và tôi cũng đã cố gắng rằng với kABPersonSortByLastName và nó cho thấy lỗi vì vậy tôi không bận tâm thử một cái khác: P – Gamerlegend

1

Hãy thử điều này

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

hy vọng nó sẽ giúp bạn.

0

bạn có thể sử dụng mã này để sắp xếp chúng và nếu bạn muốn làm việc với cùng một mã kiểm tra câu trả lời của 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]]; 
     } 

Hy vọng nó sẽ làm việc cho bạn.

0

này đã làm việc cho tôi:

//Sorting 

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); 
      ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook); 
      NSArray *allPeople = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName); 
Các vấn đề liên quan