Erkennen, was verändert wurde von ABAddressBookRegisterExternalChangecallback
Ich bin mit ABAddressBookRegisterExternalChangecallback, um die äußeren Veränderungen in AddressbookBook des Benutzers. Ich bin mit dem folgenden code zum registrieren der callback:
ABAddressBookRef ntificationaddressbook = ABAddressBookCreate();
ABAddressBookRegisterExternalChangeCallback(ntificationaddressbook, MyAddressBookExternalChangeCallback, self);
ist und wenn dieses callback wird aufgerufen, dann MyAddressBookExternalChangeCallback erfolgreich aufgerufen wird
void MyAddressBookExternalChangeCallback (ABAddressBookRef ntificationaddressbook,CFDictionaryRef info,void *context)
{
NSLog(@"Changed Detected......");
}
Habe ich folgende Fragen:
- Wie kann ich erkennen, welche Kontakte geändert wurde, und die Aktion (HINZUFÜGEN,Aktualisieren,Löschen) durchgeführt wurde auf, dass der Kontakt. Ich brauche, um die Datensatz-id des Kontakts. Ist es Möglich ?
Leider, wenn das ist nicht möglich, dann wie die apps, wie viber, tango, watsapp bekommt die Informationen ändern ?
- Ich bekommt die callback-Methode aufgerufen, nur wenn die app im hintergrund läuft, wenn die app beendet wird, ist es eine Möglichkeit, um die änderungen Benachrichtigung.
Bitte helfen. Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja das ist wahr, dass Sie können nicht erhalten Sie konkrete Hinweise auf das Telefonbuch ändert. Müssen Sie zur Synchronisierung Ihrer Daten beim Rückruf Benachrichtigung Feuer.
Den apps, wie viber, tango, watsapp auch nicht die gleiche Sache, aber in Hintergrund-thread.
Wenn die app beendet wird, dann müssen Sie zur Synchronisierung von Daten, wenn die app gestartet wird, wie in
didFinishLaunchingWithOptions
.So weit ich weiß, kann man nicht sagen, was sind die Unterschied - ich stieß auf dieses problem selbst.
Meine Lösung war:
Ich hatte einen lokalen Core Data basieren, Adressbuch, und jedes mal bekam ich diese Meldung, ich lief ein hintergrund-thread, der synchronisiert die Daten und Benachrichtigen Sie am Ende alle änderungen.
Während der ersten Zeit, ich bin dumping-alle Daten in der lokalen Datenbank mit sqlite, dann auf die externe ändern ich bin dumping neuen Daten aus der Kontakte-Datenbank, in der dummy-db in sqlite, dann feuern große lange vergleichen-Abfrage basierend auf, was sich geändert hat. In unserem Fall Stand im Vordergrund Telefonnummern und Namen. Sobald Sie ändern, zu aktualisieren, die in Ihrem Kontakte-db in sqlite.
Ich denke auch, dass whatsapp etwas ähnliches macht. Ich habe die Zeit genommen, um die änderungen widerzuspiegeln, die durch whatsapp und unsere app fast ähnlich sind. Tatsächlich, meine app ist 2 Sek. schneller als whatsapp in Bezug auf die änderungen.
Hoffe, das wird helfen.