Wie kann ich ein iPhone-Kontaktbuch mit dem Vornamen & nach dem programmierten Namen sortieren (oder sortiertes Array abrufen)?wie man iphone Kontaktbuch sortiert?
Jede Hilfe wird sehr geschätzt ...! Danke
Wie kann ich ein iPhone-Kontaktbuch mit dem Vornamen & nach dem programmierten Namen sortieren (oder sortiertes Array abrufen)?wie man iphone Kontaktbuch sortiert?
Jede Hilfe wird sehr geschätzt ...! Danke
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);
Wie wäre es damit: -
ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering
erklärte in ABPerson.h
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
Bitte fügen Sie auch einen Link zu diesem Beitrag hinzu. – tipycalFlow
Wie es in Swift verwendet werden? – Developer