2013-08-08 9 views
5

Ich habe eine Sortierfunktion, die das Adressbuch nach Nachname sortiert, muss ich diesen Code ändern, so dass es nach Vorname sortiert. Wo muss ich diesen Code ändern? Ich weiß, es ist eine einfache Veränderung, aber ich kann es nicht herausfinden. Dies ist der Code, der die Kontaktliste nach Nachnamen sortiertSo sortieren Sie ABAddressBook Kontakt durch Vorname

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


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

Antwort

8

von unten Ihre Sortiermethode implementieren kABPersonSortByFirstName setzen statt (void*) ABPersonGetSortOrdering(): -

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

Kredit geht an this

+0

Dank, dass, ich frage mich, scheint zu funktionieren, warum didnt ich diese Seite finden, wenn ich vor dem für sie in Stack-Überlauf gesucht und auch habe ich versucht, dass mit kABPersonSortByLastName und es zeigte Fehler also habe ich nicht versucht, den anderen auszuprobieren: P – Gamerlegend

1

Versuchen Sie, diese

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

hoffen, dass es Ihnen hilft.

0

Sie diesen Code, sie zu sortieren verwenden können, und wenn Sie mit dem gleichen Code arbeiten möchten Überprüfen Sie Nitins Antwort: -

 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]]; 
     } 

Ich hoffe, es wird für Sie arbeiten.

0

Dieser arbeitete für mich:

//Sorting 

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