Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 即使应用程序终止,ABAddressBookRegisterExternalChangeCallback是否也能工作_Ios_Abaddressbook - Fatal编程技术网

Ios 即使应用程序终止,ABAddressBookRegisterExternalChangeCallback是否也能工作

Ios 即使应用程序终止,ABAddressBookRegisterExternalChangeCallback是否也能工作,ios,abaddressbook,Ios,Abaddressbook,我正在使用ABAddressBookRegisterExternalChangeCallback注册地址簿数据库是否有任何更改。我可以很好地使用它,并且能够接收通知,但它们只有在应用程序运行时才起作用 一旦应用程序被终止(终止),然后重新启动,它将无法识别在终止和重新启动之间的这段时间内所做的更改 有没有一种方法可以检测到这些变化,或者说这种方法就是为了这样设计的 我正在使用的示例代码- 在viewDidLoad中- CFErrorRef error = NULL; addressBook =

我正在使用ABAddressBookRegisterExternalChangeCallback注册地址簿数据库是否有任何更改。我可以很好地使用它,并且能够接收通知,但它们只有在应用程序运行时才起作用

一旦应用程序被终止(终止),然后重新启动,它将无法识别在终止和重新启动之间的这段时间内所做的更改

有没有一种方法可以检测到这些变化,或者说这种方法就是为了这样设计的

我正在使用的示例代码-

在viewDidLoad中-

CFErrorRef error = NULL;

addressBook = ABAddressBookCreateWithOptions(NULL, &error);

ABAddressBookRegisterExternalChangeCallback(addressBook,addressBookChanged,(__bridge void *)(self));
回拨电话呢

void addressBookChanged(ABAddressBookRef reference, CFDictionaryRef dictionary, void *context) {
NSLog(@"There was a change in the addressbook");

否,仅当您的应用处于活动状态时才会收到这些警报


iOS7对后台处理的支持可能会允许进行某种形式的监控,但可能不会使用此回调。

我现在正试图为这个问题制定一些解决方案,并考虑使用此回调,同时在其他地方和应用程序启动时存储通讯簿的大小,比较它们的大小以确定是否发生了更改。我假设大多数的改变都会以这样或那样的方式造成尺寸上的微小差异。在这两者之间,我认为可能存在一个不完美但可行的解决方案。

我对此进行了强烈的头脑风暴。而且存储大小将不起作用。如果它是+1和-1呢。尺寸变化为零,但触点有变化。我处理这个问题的方式是使用核心数据。将所有同步/使用过的联系人存储在coredata模型中,每个联系人都有一个ID,然后您可以将其与ABAddressBook中的内容进行比较。是的,这更有意义——但您不能测量通讯簿文件的实际大小,而不仅仅是联系人的数量——这是更精细的东西。尽管在理论上并不完美,但在几乎任何可以想象的情况下,它都可能给你一个准确的变化衡量标准。同样,根本的问题在于你不能确定变化的大小。可以删除和写入相同数量的字节。将每个联系人视为一个实体,您需要能够找到每个实体的每个字段的差异。只有当你把以前版本的数据存储在某个地方进行比较时,你才能这样做。是的,我明白你的意思。谢谢