删除的条目未被检测到 - iOS

时间:2011-06-03 08:42:03

标签: objective-c ios abaddressbook

是否可以从应用程序中检测已删除地址簿条目(例如来自iOS电话本身)?

我有一个应用程序需要将iOS地址簿数据库的本地副本与手机中的地址簿同步。该应用程序支持支持它的iOS上的后台模式。

在具有后台功能的iOS环境中测试应用程序我的问题如下:
在应用程序完全关闭之前,应用程序未检测到系统通讯簿中已删除的条目(iOS 4在跳板中用红色X杀死它)。如果将应用程序简单地发送到后台,则会从系统通讯簿中删除联系人,然后再将应用程序带到前台,对于已删除的条目ID,函数ABRecordRef()不会返回NULL,因为条目是预期的它不再存在,它返回条目,好像它从未从系统地址簿数据库中删除。

如上所述 - 如果应用程序完全终止并重新启动,则删除的ID的ABRecordRef()将按预期工作 - 它将返回NULL。有没有办法检测这个删除的条目而不等待应用程序被杀死并重新启动?

2 个答案:

答案 0 :(得分:0)

是。使用ABAddressBookRegisterExternalChangeCallback注册地址簿的更改,例如

// Your method called when the user has granted access to their address book data.
- (void)accessGrantedForAddressBook
{
    ABAddressBookRegisterExternalChangeCallback(sharedAddressBook, MyAddressBookExternalChangeCallback, (__bridge void *)(self));
}

MyAddressBookExternalChangeCallback是你的回调函数。

答案 1 :(得分:0)

我相信每次刷新地址簿中的数据时都需要创建一个新的ABAddressBook。原因是:

您可能已在地址簿副本中添加,更新和删除了记录,但尚未将其设置为“保存”或“还原”。因此,如果系统(例如iOS内置的联系簿应用程序)更改了地址簿中的内容,则无法自动获取它们。

尝试运行Revert或重新创建地址簿,它应该可以工作。