gpt4 book ai didi

ios - 从不调用使用 ABAddressBookRegisterExternalChangeCallback 注册的地址簿更改回调 (iOS 8)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:12 25 4
gpt4 key购买 nike

我已经找到了很多关于此的示例,但是在阅读了整个 ABAddressBook 文档之后,我仍然无法弄清楚为什么在我的例子中,我的更改回调没有被调用。我只是简单地设置了一个地址簿并为其注册了一个回调函数。

我可以很好地访问地址簿,但是无论我在联系人应用程序中更改多少联系人然后重新打开我的应用程序,回调函数都不会被调用。有什么理由永远不会调用回调吗?我已经确保我不会释放地址簿或注销回调。

初始化代码:

// Set up address book API.
CFErrorRef *error = NULL;
_addressBook = ABAddressBookCreateWithOptions(NULL, error);
if (error) {
NSLog(@"Could not initialize address book: %@", CFBridgingRelease(CFErrorCopyFailureReason(*error)));
} else {
ABAddressBookRegisterExternalChangeCallback(_addressBook, RogerAddressBookChangeCallback, (__bridge void *)self);
NSLog(@"Registered callback");
}

回调函数:

void RogerAddressBookChangeCallback(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
NSLog(@"Address book change");
ABAddressBookRevert(addressBook);
RogerAddressBook *instance = (__bridge RogerAddressBook *)context;
[instance import];
}

我看到日志输出 Registered callback 但从未看到 Address book change

最佳答案

实际上 ABAddressBook 的代码是用 C 语言编写的。因此您可能会发现使用原始 ABAddressBook 框架有困难。

所以我建议使用第三方库(这只是 C 到 Obj-C 的改造)来访问联系人和 Contacts Change。

这是一个热门图书馆的链接 https://github.com/Alterplay/APAddressBook

使用上面的框架,你可以很容易地观察到通讯录的变化。

观察通讯录外部变化

// start observing
[addressBook startObserveChangesWithCallback:^
{
NSLog(@"Address book changed!");
}];
// stop observing
[addressBook stopObserveChanges];

这个库还有很多选项,比如排序、过滤等。

关于ios - 从不调用使用 ABAddressBookRegisterExternalChangeCallback 注册的地址簿更改回调 (iOS 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com