2010-04-23 10 views

risposta

26

Chiama il ABAddressBookCopyArrayOfAllPeople() per ottenere una serie di record di tutte le persone nella rubrica. Quindi seguire the documentation:

per ordinare un array di persone, utilizzare i CFArraySortValues ​​funzione con la funzione ABPersonComparePeopleByName come comparatore ed un contesto di tipo ABPersonSortOrdering. L'ordinamento desiderato dall'utente, restituito da ABPersonGetSortOrdering, è generalmente il contesto preferito.

Il seguente listato mostra un esempio di ordinamento l'intero database della Rubrica:

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

Che ne dite di questo: -

ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering 

dichiarato in ABPerson.h

+0

Come saranno utilizzati in Swift? – Developer

4

Sono utilizzando il codice precedente (dalla risposta approvata) per copiare la rubrica da iPhone e utilizzato anche ABPersonComparePeopleByName per ordinare la rubrica. Ma ha scoperto che avrà diversi risultati di ordinamento per la stessa rubrica, quando la lingua internazionale dell'iPhone è diversa. Supponiamo che sia ragionevole ordinare lingue diverse in base a criteri diversi. Quindi, nel nostro progetto abbiamo "en.lproj" .. "zh-hant.lproj" ... "ja.lproj", In NSCalendar, abbiamo anche "locale" impostazione. Quindi sto pensando a come impostare i criteri per ABPersonComparePeopleByName e ho chiesto ad Apple. Una risposta molto utile: "un ordinamento non è prevedibile".

La parte rilevante della risposta di Apple è qui sotto:

Questo è in realtà un comportamento normale. L'ordinamento in diverse lingue è in realtà un problema incredibilmente complesso in cui l'aspettativa dell'utente varia notevolmente a seconda della lingua/posizione. Onestamente, la scelta migliore è quella di adeguare le aspettative e assumere che l'ordinamento non sia prevedibile. È probabile che qualsiasi altro approccio infastidisca e confonderà molti utenti internazionali.

-Kevin

Kevin Elliott, DTS Ingegnere, kevin_elliott @ mela, com

+0

si prega di aggiungere un collegamento a questo post pure. – tipycalFlow

Problemi correlati