Ich habe ein seltsames Problem, bei dem 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.
Wenn das Objekt erstellt wird (Singleton, also nur ein Objekt), registriere ich mich für Benachrichtigungen mit diesem Code:
%Vor%Die Methode, die aufgerufen wird, sieht folgendermaßen aus:
%Vor%Irgendwelche Ideen, wie man das löst?
Ich hatte ein ähnliches Problem. Der Callback würde nur einmal beim ersten Mal aufgerufen werden, aber wenn ich ein zweites Mal Änderungen am Adressbuch vornehmen würde, würde es mehrmals aufgerufen werden.
Für mich bestand das Problem in der Methode, in der ABAddressBookRegisterExternalChangeCallback
in der Methode applicationWillResignActive:
von appDelegate aufgerufen wurde.
Die Art, wie ich das Adressbuch verwendet habe, war für eine Synchronisierungseinstellung. Das Problem war, dass ich den externen Rückruf jedes Mal registrieren wollte, wenn die Synchronisierungseinstellungen gespeichert wurden und nicht nur, wenn die Synchronisierungseinstellungen geändert wurden.
Zur Veranschaulichung: Hier ist der Code, den ich im appDelegate
aufgerufen habe %Vor% Ich habe den Aufruf von setAddressBookChanged
in der Methode saveSettings
entfernt und ihn beim Erstellen des Adressbuchs (beim ersten Einrichten) und bei jeder Änderung der Synchronisierungseinstellungen aufgerufen.
Hoffentlich hilft dir das.
Meine Lösung war ziemlich einfach und es funktioniert, nicht nur für diese, sondern für alle wiederholten Rückrufe (einschließlich der lokalen Benachrichtigungen wiederholte Anrufe): Ich behalte eine Eigenschaft mit der letzten Anrufzeit und überprüfe das Zeitintervall. Hoffe es hilft, für mich hat es den Job gemacht.
AppDelegate * delegate = (__bridge AppDelegate *) Kontext;
%Vor%Tags und Links iphone ios abaddressbook