2

如果对 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");
4

2 回答 2

1

不,这些警报只会在您的应用处于活动状态时收到。

可能 iOS7 对后台处理的支持将允许某种监视,但可能不使用此回调。

于 2013-09-28T04:36:19.377 回答
0

我现在正在尝试为这个问题制定一些解决方案,并且正在考虑使用此回调并将地址簿的大小存储在其他地方和应用程序启动时,比较它们的大小以确定是否发生了变化。我假设大多数更改可能会以某种方式导致大小的微小差异。在这两者之间,我认为可能存在一个不完美但可以通过的解决方案。

于 2013-12-14T00:06:48.427 回答