Ich habe ein merkwürdiges Problem, wo ich meine iOS-App registriere, um Änderungen im Telefonadressbuch zu hören. Die richtige Methode wird aufgerufen, wenn sich etwas im Adressbuch ändert, aber es wird 2 - 6 Mal aufgerufen.ABAddressBookRegisterExternalChangeCallback mehrmals aufgerufen
Wenn das Objekt erstellt wird (Singleton, so dass nur ein Objekt), melde ich mich für Benachrichtigungen mit diesem Code:
ABAddressBookRegisterExternalChangeCallback(notificationAddressBook, addressBookChanged, (__bridge_retained void *)self);
Die Methode, die wie folgt aussieht genannt wird:
void addressBookChanged(ABAddressBookRef ab, CFDictionaryRef info, void *context){
ABAddressBookRevert(ab);
NSLog(@"ADDRESSBOOK CHANGED");
[phoneBookCopy updateCopy];
}
Beliebig Ideen wie man das löst?
Ich habe auch dieses Problem. Jedes Mal, wenn ich zum iOS-Adressbuch wechsle, um den Namen eines Kontakts zu ändern und zu meiner App zurückzukehren, wird der Rückruf viermal aufgerufen - immer. Ich habe versucht, einen Kontext hinzuzufügen, als ich mich registriert habe und ich sehe, dass mein Kontext in allen vier Anrufen an mich gesendet wird. Ich lese hier: http://stackoverflow.com/questions/7116956/gcd-and-callbacks-concurrency-issue, dass jemand behauptet, dass dies ein bekannter Fehler ist, aber ich habe es nicht gefunden. Hat jemand mehr Informationen über dieses irritierende Verhalten? –