2010-04-23 8 views

Respuesta

26

Para obtener una variedad de registros de personas en la libreta de direcciones, llame al ABAddressBookCopyArrayOfAllPeople(). A continuación, siga the documentation:

Para ordenar una serie de personas, el uso de los CFArraySortValues ​​de función con el ABPersonComparePeopleByName función que el comparador y un contexto de la ABPersonSortOrdering tipo. El orden de clasificación deseado por el usuario, como lo devuelve ABPersonGetSortOrdering, generalmente es el contexto preferido.

El siguiente código muestra un ejemplo de clasificación de la base de datos de libreta de direcciones:

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

¿Qué tal esto: -

ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering 

declarados en ABPerson.h

+0

Cómo serán utilizados en Swift? – Developer

4

soy utilizando el código anterior (de la respuesta aprobada) para copiar la libreta de direcciones de iPhone, y también se usó ABPersonComparePeopleByName para ordenar la libreta de direcciones. Pero descubrió que tendrá diferentes resultados de clasificación para la misma libreta de direcciones, cuando el idioma internacional del iPhone es diferente. Supongamos que es razonable clasificar diferentes idiomas según diferentes criterios. Entonces, en nuestro proyecto tenemos "en.lproj" .. "zh-hant.lproj" ... "ja.lproj", en NSCalendar, también tenemos la configuración "locale". Así que estoy pensando en cómo establecer los criterios para ABPersonComparePeopleByName y le pregunté a Apple. Una respuesta muy útil: "un orden de clasificación no es predecible".

La parte pertinente de la respuesta de Apple es a continuación:

Esto es en realidad un comportamiento normal. Clasificar en diferentes idiomas es en realidad un problema increíblemente complejo en el que la expectativa del usuario varía ampliamente según el idioma/la ubicación. Honestamente, su mejor opción es ajustar sus expectativas y asumir que el orden de clasificación no es predecible. Cualquier otro enfoque es muy probable que moleste y confunda a muchos usuarios internacionales.

-Kevin

Kevin Elliott, Ingeniero DTS, kevin_elliott @ manzana, com

+0

por favor agregue un enlace a esta publicación también. – tipycalFlow

Cuestiones relacionadas