2012-09-17 3 views
9

Meine App muss die Kontakte eines Benutzers auf unseren Servern speichern (natürlich mit der Erlaubnis des Benutzers). Eine der Anforderungen besteht darin, alle Änderungen im Adressbuch des Geräts (Hinzufügen/Bearbeiten/Löschen) auf dem Server widerzuspiegeln.iOS-Adressbuch - Wie weiß man, welcher Kontakt hinzugefügt/bearbeitet/gelöscht wurde?

Gibt es einen einfachen Weg/Best Practice, um zu bestimmen, welche Adressbuchkontakte vor dem Neustart einer Anwendung geändert wurden?

Alles, was ich sehen kann, sind Callback-Methoden, um eine Anwendung von einer Änderung im Adressbuch zu benachrichtigen, aber es scheint keine dokumentierten Möglichkeiten zu geben, welche Kontakte hinzugefügt, bearbeitet oder gelöscht wurden.

Woran ich gerade denke ist, die neue Liste der Kontakte manuell mit einer auf dem Gerät gespeicherten vergleichen, dann aktualisieren Sie sowohl die Anwendung und den Server der Änderungen. Aber ich denke, dass es zu viel ist, wenn der Benutzer eine große Anzahl von Kontakten hat.

Danke!

+0

Ich denke, das [Antwort Stackoverflow] (http://stackoverflow.com/questions/12348916/addressbook-synchronization-in-ios) könnte für Sie hilfreich sein. –

Antwort

1

Sehen Sie sich libsqlite3.dylib an und erstellen Sie eine SQL-Datenbank, die auf die Flatfiles zugreift, die für alle benötigten Eigenschaften generiert wurden, und dann Ihre Datenbank regelmäßig mit den Geräten der Benutzer vergleicht. Stellen Sie sicher, dass beide Datenbanken nur das Nötigste erhalten, das Sie aus dem abaddressbook-Framework benötigen.

Beispiel iOS Projekt mit sqlite3 Bibliothek ist hier:

http://www.techotopia.com/index.php/An_Example_SQLite_based_iOS_7_Application

& Detail über so Objekte Mehrwert Kontakt hier mit ABAddressbook tun:

http://linuxsleuthing.blogspot.com/2012/10/addressing-ios6-address-book-and-sqlite.html

+1

Dies ist nicht der ideale Weg, um jedes Mal die Kontakte zu iterieren. Besser ist es, 'ABAddressBookRegisterExternalChangeCallback' – Mrug

2

Sie müssen Registrieren Sie Ihre Klasse mit der ABAddressBookRegisterExternalChangeCallback übergeben eine ABAddressBookRef und den Rückruf ("addressBookDidChang e“in meinem Beispiel)

ABAddressBookRef addressBook = //... 

ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookDidChange(__bridge_retained void *)self); 

void addressBookDidChange(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) 
{ 
    //Something changed from last application launch, insert your logic here... 

    //If you want to handle it in a "Objective-C" method you can do something like: 
    [((__bridge ABManager*) context) yourObjectiveCMethod]; 

} 
+2

Es sagt, dass etwas passiert ist mit Adressbuch noch nicht beantwortet - Welcher Kontakt wurde hinzugefügt/Editiert/Gelöscht? –

+1

@VenuGopalTewari Sie können Ihre Kontakte speichern und sie dann mit den Kontakten vergleichen, die im Callback addressBookDidChange – andreacipriani

+0

extrahiert wurden. Können Sie eine gute Logik oder ein Beispiel oder einen Beispielcode vorschlagen? – Ayaz

Verwandte Themen