|
Explico el escenario: tengo una aplicación que trabaja con la agenda de contactos y me gustaría recibir notificación cuando el usuario cambia de aplicación (o sea, la mía se queda en background), realiza cambios en la agenda (cambiar datos, crear o borrar contatos, etc.) y finalmente vuelve a mi app, para actualizar convenientemente los datos dentro de mi aplicación. Esto se supone que se hace del siguiente modo:
Teniendo un callback en C preparado (y que está en el mismo archivo .m) como este:
Pero no funciona. Hago pruebas tanto en simulador como en el dispositivo (iPhone4) y el callback nunca llega a ejecutarse... Sé que tiene que haber algún error ya que he comprobado en otras apps similares que se enteran cuando se realizan cambios en la agenda, pero no doy con la tecla. |
|
Solucionado. He movido el código (registro y callback) a mi clase principal (aquella a la que hago referencia en main.m y que cumple con el protocolo UIApplicationDelegate) y por fin se está llamando al callback... Sinceramente no tengo claro el origen del problema (threads?) pero el caso es que de esta forma funciona :) En realidad esto no debería ser necesario. Si no liberabas en addressBook entonces quizás estuvieras liberando el objeto self de la llamada ABAddressBookRegisterExternalChangeCallback.
(27 Feb '11, 00:53)
Iván Leider ♦
Estoy de acuerdo, no debería ser necesario pero el caso es que funciona. No tengo mucho tiempo ahora mismo para investigar el problema real, pero sí que te confirmo que seguro que no estoy liberando ese "self" porque es una instancia que uso continuamente durante toda la vida de la aplicación.
(27 Feb '11, 01:17)
xeleh
|
|
Revisa que no hayas liberado "addressBook". También puedes usar NSNotification para recibir las notificaciones de tipo: kABDatabaseChangedExternallyNotification No estoy liberando "addressBook". El tipo de notificación que comentas serviría sólo para una app de Mac, pero aquí hablo de una app para iOS (he agregado un tag para que quede más claro). Te agradezco igualmente la respuesta.
(25 Feb '11, 22:22)
xeleh
|
¿Puede ser que estés haciendo un CFRelease(addressBook) antes del momento en el que esperas que llame abChanged?
No, no lo estoy haciendo.