1

我有几个与地址簿和ABAddressBookRegisterExternalChangeCallback.

addressBook = ABAddressBookCreateWithOptions(NULL, &error);

我正在打开一个新的联系人记录allowsEditing = YES并将其添加到

ABAddressBookAddRecord(addressBook, aContact,&anError)

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

所有这一切都不是在应用程序委托中完成的(我读过一篇文章说这可能是回调未被调用的原因)

是否必须在应用程序委托中完成?问题是因为这个联系人是刚刚创建的吗?但是,如果我尝试调用 app delegate 来:

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

应用程序崩溃。

在控制器中单击 DONE 按钮时,还有其他方法可以得到通知吗?我不关心AB的变化,我只想使用内置的联系人编辑功能,我真正关心的是ABRecordRef。

我想我想说的是我真正需要的是 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 回答