Sto migrando un'applicazione dal deprecato Address Book Framework al nuovo Contacts Framework. L'applicazione utilizza ABAddressBookRegisterExternalChangeCallback
per ricevere una notifica quando un'altra applicazione modifica un contatto.Contact Framework equivalente a ABAddressBook.ABAddressBookRegisterExternalChangeCallback
Non riesco a trovare funzionalità equivalenti nel framework dei contatti. la documentazione Apple dice di utilizzare il centro di notifica di default con the CNContactStoreDidChangeNotification
notification:
La notifica inviato quando i cambiamenti si verificano in un altro
CNContactStore
.
Prendendo il consiglio di Apple, il mio codice simile a questo:
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "contactsChanged:",
name: CNContactStoreDidChangeNotification,
object: nil)
Tuttavia, ho trovato due problemi con questo approccio:
- sto notificato di tutti modifiche, tra cui quelli realizzati dalla mia stessa applicazione.
- Le notifiche sono false: ricevo molte notifiche per una singola modifica.
Se entro la descrizione di debug della notifica quando il cambiamento è stato fatto nel mio app, ottengo qualcosa di simile:
NSConcreteNotification 0x7d3370e0 {name = CNContactStoreDidChangeNotification; userInfo = {
CNNotificationOriginationExternally = 1;
CNNotificationSourcesKey = (
);
}}
E se vengono apportate le modifiche esternamente:
NSConcreteNotification 0x7bf7a690 {name = CNContactStoreDidChangeNotification; userInfo = {
CNNotificationOriginationExternally = 1;
CNNotificationSourcesKey = (
);
}}
Come potete vedere, nulla di ovvio con cui distinguerli.
Qualcuno può dirmi come ottenere lo stesso comportamento dal Framework Contatti come si può ottenere da ABAddressBookRegisterExternalChangeCallback
?
auto si riferisce all'istanza della classe, da cui si chiama questo metodo. – ogres
@ rogres sicuro, povero testo da parte mia. Fondamentalmente, passando in "self" ottieni ciò che cerco (ricevendo solo quei cambiamenti da app esterne)? Perché ciò funzioni, quale sarebbe il tipo di sé? –
autonomamente potrebbe essere di qualsiasi tipo, purché abbia indirizzoBookDidChange: metodo dichiarato. – ogres