Ordenar los contactos basados ​​en el uso reciente / la mayoría de los utilizados / la urgencia en AddressBook iOS

Necesito clasificar los contactos en el dispositivo del usuario en function de la urgencia / urgencia más utilizada recientemente y mostrarlos en una sola vista (no como en la aplicación del teléfono donde se muestran en tabs separadas). He investigado sobre esto, pero solo he sabido orderar los contactos alfabéticamente. ¿El marco de la libreta de direcciones lo permite o existe de alguna otra forma? Cualquier ayuda sería apreciada.

No Lamentablemente, no hay forma de saber si un logging se ha utilizado recientemente o no.

Sin embargo, puede orderar los loggings en la libreta de direcciones utilizando las properties especificadas a continuación:

Propiedades del registro de AdressBook Aquí hay un ejemplo simple de orderar loggings en function de la date de creación en order descendente.

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(nil, NULL); ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { NSArray *allPeople = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBookRef)); NSArray *sortedPeople = [allPeople sortedArrayUsingComparator:^NSComparisonResult(id aRecord, id otherRecord) { ABRecordRef aRecordRef = (__bridge ABRecordRef)aRecord; ABRecordRef otherRecordRef = (__bridge ABRecordRef)otherRecord; NSDate *aRecordCreationDate = CFBridgingRelease(ABRecordCopyValue(aRecordRef, kABPersonCreationDateProperty)); NSDate *otherRecordCreationDate = CFBridgingRelease(ABRecordCopyValue(otherRecordRef, kABPersonCreationDateProperty)); return [aRecordCreationDate compare:otherRecordCreationDate]; }]; }); CFRelease(addressBookRef); 

Hola, he encontrado una solución. Primero creamos Abaddressbook y lo registramos con cambios de callback como este.

1) ABAddressBookRef ntificationaddressbook = ABAddressBookCreate ();

2) ABAddressBookRegisterExternalChangeCallback (ntificationaddressbook, addressBookChanged, self);

y cuando realizará un cambio en cualquier contacto (modificado, abierto, editar, etc.). entonces su callback llamará a su delegado de esta manera

3) void addressBookChanged (ABAddressBookRef reference, CFDictionaryRef dictionary, void * context)

{

/// La libreta de direcciones cambia

// Ahora puedes implementar la lógica

1-En primer lugar, obtenga la date y la hora de cambio que es ahora. desde [date de date NS].

esta será la date / hora de cambio de un logging
}

Espero que te ayude.