ABAddressBookRegisterExternalChangeCallback wurde mehrmals aufgerufen

9

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?

    
joakimb 10.04.2012, 21:07
quelle

4 Antworten

3

versuche das:

%Vor%

Es wurde mir geholfen.

    
rusBogun 03.06.2014 11:35
quelle
1

Ich hatte vor einer Weile das gleiche Problem, und ich musste es lösen, indem ich einen NSTimer für die doppelten Callbacks erstellte:

%Vor%     
Z S 16.05.2012 19:56
quelle
0

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.

    
plasmaTonic 22.10.2013 14:53
quelle
0

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%     
Eran Katsav 17.11.2013 19:06
quelle

Tags und Links