J'ai trouvé beaucoup d'exemples à ce sujet, mais après avoir lu toute la documentation de ABAddressBook, je n'arrive toujours pas à comprendre pourquoi, dans mon cas, mon changement le rappel n'est pas appelé. J'ai simplement mis en place un carnet d'adresses et enregistrer une fonction de rappel pour cela.Rappel de changement de carnet d'adresses enregistré avec ABAddressBookRegisterExternalChangeCallback n'est jamais appelé (iOS 8)
Je peux très bien accéder au carnet d'adresses, mais la fonction de rappel n'est jamais appelée, peu importe combien je change de contacts dans l'application Contacts, puis rouvre mon application. Y a-t-il une raison pour que le rappel ne soit jamais appelé? Je me suis déjà assuré que je ne libère pas le carnet d'adresses ou désinscrit le rappel.
Le code init:
// Set up address book API.
CFErrorRef *error = NULL;
_addressBook = ABAddressBookCreateWithOptions(NULL, error);
if (error) {
NSLog(@"Could not initialize address book: %@", CFBridgingRelease(CFErrorCopyFailureReason(*error)));
} else {
ABAddressBookRegisterExternalChangeCallback(_addressBook, RogerAddressBookChangeCallback, (__bridge void *)self);
NSLog(@"Registered callback");
}
La fonction de rappel:
void RogerAddressBookChangeCallback(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
NSLog(@"Address book change");
ABAddressBookRevert(addressBook);
RogerAddressBook *instance = (__bridge RogerAddressBook *)context;
[instance import];
}
Je vois la sortie du journal Registered callback
mais jamais Address book change
.
Chaque fois que je change un nom de contact dans l'application de contact, je vois "Changement d'adresse du livre" connecté à la console, 'ABAddressBookRef _addressBook = ABAddressBookCreateWithOptions (NULL, erreur);', c'est le seul code que je modifié. Peut-être que la fonction de rappel n'est pas dans la même portée, j'ai mis le code de registre dans 'viewDidLoad', et la fonction de rappel dans le même contrôleur de vue. – gabbler
J'ai le même problème et j'ai compris que je devrais appeler ABAddressBookRegisterExternalChangeCallback dans la file d'attente principale sinon le callback ne sera pas appelé. Avez-vous appelé dans la file d'attente principale? – Qiulang