2012-09-17 15 views
9

私のアプリが(もちろんユーザーの許可を与えられた。)当社のサーバー上のユーザーの連絡先を保存する必要があることの要件の1つは、サーバに(追加/編集/削除)デバイスのアドレス帳で変更を反映するためです。iOSアドレス帳 - どの連絡先が追加/編集/削除されたかを知るには?

アドレス帳の連絡先を再起動適用前に変更された決定に関してで簡単な方法/ベストプラクティスはありますか?

私が見ることができるすべては、アドレス帳の変更をアプリケーションに通知するコールバックメソッドですが、追加、編集、または削除された連絡先決定するための文書化の方法が存在しないようです。

私は今と思っていますが、手動で適用し、変更のサーバーの両方を更新し、デバイスに保存されている1との接触の新しいリストを比較することです。しかし、ユーザーが多量の連絡先を持っていると、あまりにも多すぎると思う。

ありがとうございます! libsqlite3.dylibを使用して、必要なすべてのプロパティのために生成されたフラット・ファイルにアクセスして、定期的にユーザーのデバイスにデータベースを比較するSQLデータベースを作成するに

+0

私はこの[StackOverflowの解答](http://stackoverflow.com/questions/12348916/addressbook-synchronization-in-ios)はあなたのために役立つかもしれないと思います。 –

答えて

1

ルック。両方のデータベースがabaddressbookフレームワークから必要とされる裸の必需品だけを取得することを確認してください。

はsqlite3のライブラリとサンプルのiOSプロジェクトはここにある:

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

& 詳細こちらの連絡先の複数値プロパティにABAddressbookとそうで:

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

+1

これは毎回連絡先を反復する理想的な方法ではありません。より良いことは、 'ABAddressBookRegisterExternalChangeCallback 'を使用することです。 – Mrug

2

あなたがする必要がありますABAddressBookRefとコールバック(「addressBookDidChangを渡すABAddressBookRegisterExternalChangeCallbackを使用してクラスを登録私の例ではE」)

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

アドレス帳で何かが起きたと答えています - どの連絡先が追加/編集/削除されましたか? –

+1

@VenuGopalTewari連絡先を保存してからコールバックで抽出した連絡先と比較することができます。addressBookDidChange – andreacipriani

+0

良いロジックやサンプル、サンプルコードをお勧めしますか? – Ayaz

関連する問題