Tengo una aplicación para iPhone que hace uso de laAddressBook.framework y utiliza Core Data para almacenar estos contactos. Para asegurarme de actualizar mi propia base de datos cuando se actualiza la Libreta de direcciones (ya sea a través de MobileMe o editando desde mi propia aplicación), me suscribo a la notificación de cuándo se está actualizando la Libreta de direcciones. Llamo a esto en el inicio:
ABAddressBookRef book = ABAddressBookCreate();
ABAddressBookRegisterExternalChangeCallback(book, addressBookChanged, self);
Que (supuestamente) llama a esto en cualquier edición. Tengo un ABPersonViewController que permite la edición, y parece que nunca se llama a AddressBookChanged.
void addressBookChanged(ABAddressBookRef reference, CFDictionaryRef dictionary, void *context) {
// The contacts controller we need to call
ContactsController *contacts = (ContactsController *)context;
// Sync with the Address Book
[contacts synchronizeWithAddressBook:reference];
}
¿Hay alguna razón para que no sea llamado?
Respuestas
8 para la respuesta № 1Resulta que la razón por la que no me llamaron fue un simple error. Lo hice:
CFRelease(book);
Después de configurar la notificación. Retiré eso y ahora está siendo llamado.