1

アドレス帳と についていくつか質問がありABAddressBookRegisterExternalChangeCallbackます。

addressBook = ABAddressBookCreateWithOptions(NULL, &error);

allowsEditing = YESに追加して新しい連絡先レコードを開いています

ABAddressBookAddRecord(addressBook, aContact,&anError)

ABAddressBookRegisterExternalChangeCallback(addressBook, changed, (__bridge void *)(self));

これはすべてアプリデリゲートでは行われません(これがコールバックが呼び出されない理由である可能性があるという投稿の1つを読みました)

アプリデリゲートで行う必要がありますか? この連絡先が作成されたばかりであることが問題ですか? ただし、アプリの委任を次のように呼び出しようとすると、次のようになります。

ab = ABAddressBookCreateWithOptions(NULL, &error);
ABAddressBookRegisterExternalChangeCallback(appABChanged, ab, (__bridge void *)(self));

アプリがクラッシュします。

コントローラーで DONE ボタンがクリックされたときに通知を受け取る他の方法はありますか? AB の変更は気にしません。組み込みの連絡先編集機能を使用したいだけです。本当に気になるのは ABRecordRef だけです。

私が言おうとしているのは、実際に必要なのは、DONEクリックボタンのABPersonViewController通知と、実際に変更された場合はフラグ付きで変更されたABrecordRefを受け取ることだと思います。

4

1 に答える 1

1

最初に登録します。たとえば、didFinishingLunchingでは、次の関数を使用して登録します。

ABAddressBookRef book = ABAddressBookCreate();
ABAddressBookRegisterExternalChangeCallback(book, addressBookChanged, self);

ネイティブの連絡先のレコードを変更すると、次の機能を使用して通知を受け取ります:`

void addressBookChanged(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
    NSLog(@"Recevied notification");
}
于 2013-01-30T12:22:57.287 に答える