2010-04-23 9 views

Antwort

26

Rufen Sie ABAddressBookCopyArrayOfAllPeople(), um ein Array aller Personen Datensätze im Adressbuch zu erhalten. Dann folgt the documentation:

ein Array von Menschen zu sortieren, verwenden, um die Funktion CFArraySortValues ​​mit der Funktion ABPersonComparePeopleByName als Komparator und einem Kontext vom Typ ABPersonSortOrdering. Die bevorzugte Sortierreihenfolge des Benutzers, wie sie von ABPersonGetSortOrdering zurückgegeben wird, ist im Allgemeinen der bevorzugte Kontext.

Der folgende Code Listing zeigt ein Beispiel für die gesamte Adressbuch-Datenbank Sortierung:

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

Wie wäre es damit: -

ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering 

erklärte in ABPerson.h

+0

Wie es in Swift verwendet werden? – Developer

4

Ich bin Verwenden Sie den obigen Code (von der genehmigten Antwort), um Adressbuch vom iPhone zu kopieren, und auch ABPersonComparePeopleByName verwendet zum Sortieren des Adressbuchs. Aber festgestellt, dass es unterschiedliche Sortierergebnisse für das gleiche Adressbuch haben wird, wenn die internationale Sprache des iPhone anders ist. Angenommen, es ist sinnvoll, verschiedene Sprachen nach verschiedenen Kriterien zu sortieren. Also in unserem Projekt haben wir "en.lproj" .. "zh-hant.lproj" ... "ja.lproj", In NSCalendar haben wir auch "locale" Einstellung. Also überlege ich mir, wie man die Kriterien für ABPersonComparePeopleByName setzt und fragte Apple. Eine sehr hilfreiche Antwort: "eine Sortierreihenfolge ist nicht vorhersehbar".

Der relevante Teil der Antwort von Apple unter:

Dies ist eigentlich ein normales Verhalten. Das Sortieren in verschiedenen Sprachen ist eigentlich ein unglaublich komplexes Thema, bei dem die Erwartungen des Benutzers je nach Sprache/Standort stark variieren. Ehrlich gesagt, ist Ihre beste Option, Ihre Erwartungen anzupassen und davon auszugehen, dass die Sortierreihenfolge nicht vorhersehbar ist. Jeder andere Ansatz wird sehr wahrscheinlich viele internationale Benutzer verärgern und verwirren.

-Kevin

Kevin Elliott, DTS Ingenieur, kevin_elliott @ apple, com

+0

Bitte fügen Sie auch einen Link zu diesem Beitrag hinzu. – tipycalFlow