控制器中的ABAddressBookRegisterExternalChangeCallback未在完成编辑时调用

时间:2013-01-25 03:07:09

标签: edit abaddressbook abrecordref

我有几个与地址簿和ABAddressBookRegisterExternalChangeCallback相关的问题。

addressBook = ABAddressBookCreateWithOptions(NULL, &error);

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

ABAddressBookAddRecord(addressBook, aContact,&anError)

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

所有这些都不是在app delegate中完成的(我已经阅读了一条帖子,说明这可能是回调未被调用的原因)

是否必须在app delegate中完成?问题是因为这个联系人刚刚创建了吗? 但是,如果我也尝试将app delegate调用:

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

应用程序崩溃。

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

我想我想说的是我真正需要的是ABPersonViewController通知DONE点击按钮并接收修改过的ABrecordRef希望带有一个标志,如果它实际被修改过。

1 个答案:

答案 0 :(得分:1)

首先你注册例如在didFinishingLunching中你使用这个函数注册:

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

当您更改本机联系人的记录时,您会收到使用此功能的通知:“

void addressBookChanged(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
    NSLog(@"Recevied notification");
}