/ / Devolución de llamada de la libreta de direcciones no llamada

No se llama a la devolución de llamada de la libreta de direcciones - iphone, object-c, libreta de direcciones

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 № 1

Resulta 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.