【问题标题】:Deleted Entries not being detected - iOS未检测到已删除条目 - iOS
【发布时间】:2011-06-03 08:42:03
【问题描述】:

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

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

在支持后台的 iOS 环境中测试应用程序我的问题如下:
应用程序在应用程序完全关闭之前不会检测到系统通讯录中已删除的条目(iOS 4 用跳板上的红色 X 杀死它)。如果应用程序只是简单地发送到后台,则从系统通讯录中删除联系人,然后应用程序再次被带到前台,删除条目 id 的函数 ABRecordRef() 不会像条目预期的那样返回 NULL它不再存在,它返回条目,就好像它从未从系统通讯簿数据库中删除一样。

如上所述 - 如果应用程序完全终止并重新启动,则已删除 id 的 ABRecordRef() 将按预期工作 - 它返回 NULL。有什么方法可以在不等待应用被杀死并重新启动的情况下检测到这个已删除的条目?

【问题讨论】:

  • 如果你得到答案,请分享。

标签: objective-c ios abaddressbook


【解决方案1】:

是的。使用ABAddressBookRegisterExternalChangeCallback注册更改通讯录,例如

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

MyAddressBookExternalChangeCallback 是你的回调函数。

【讨论】:

    【解决方案2】:

    我相信每次刷新通讯簿中的数据时,您都需要创建一个新的 ABAddressBook。原因是这样的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      • 2013-12-31
      相关资源
      最近更新 更多