我正在使用原生地址簿开发应用程序。我已经注册了一个回调函,以便在地址簿从外部发生变化时收到通知。
ABAddressBookRegisterExternalChangeCallback(myAddrrbook, changefunction, self)
我的应用可以在AddressBook
内创建新记录,为此我正在使用ABNewPersonViewController
:
ABNewPersonViewController *controller = [[ABNewPersonViewController alloc] init];
controller.addressBook = myAddrrbook;
问题是,当我使用自己的应用程序时,我仍然收到通知,就像它在其他地方改变了一样。
但是当我在模拟器上运行时,一切都是OK
,并且在添加联系人时没有发送通知。
如何避免在设备上接收通知?
有人遇到过这样的问题吗?
答案 0 :(得分:2)
只要任何应用程序(包括您的应用程序)修改设备AddressBook,就会调用回调。根据Apple文档:
<强> ABAddressBookRegisterExternalChangeCallback 强>
注册回调以在通讯簿时接收通知 数据库已被修改。
在这种情况下,回调中的“外部”一词最好被认为是“设备自己的地址簿处理代码的外部”,而不是“我应用程序的外部”
据我所知,过滤掉你的应用程序所做的更改的唯一方法是在本地进行任何更改之前设置一个标志,然后检查回调中的标志(虽然这有可能存在竞争条件,但它不应该在大多数用例中都不是iPhone的主要问题)