【问题标题】:iPhone AddressBook external callback notification?iPhone通讯录外部回调通知?
【发布时间】:2011-07-15 06:20:59
【问题描述】:

在 viewDidLoad 中,我订阅了通知以获取外部回调通知。 如果我更改了我的 iphone 联系人中的任何内容,我不知道为什么我的应用程序没有收到通知。

我是这样做的:

ab=ABAddressBookCreate();
ABAddressBookRegisterExternalChangeCallback(ab, MyAddressBookExternalChangeCallback, self);

我已经在同一个控制器中定义了这个

void MyAddressBookExternalChangeCallback ( ABAddressBookRef addressBook, CFDictionaryRef info, void *context ) {
 [((TGTextsInboxController *) context) addressBookHasChanged];
}

我该如何调试呢?我在模拟器中尝试过这种方式。

  1. 我在 TGTextsInboxController viewController 上打开了我的应用程序
  2. 我按下主页按钮,我的应用程序进入后台
  3. n现在我打开了 iPhone 通讯录,更改了任何人的任何电话号码。
  4. 再次从后台打开应用程序。
  5. 没有反映任何通知。调试器指针均未命中此方法“MyAddressBookExternalChangeCallback”

有什么问题吗?

【问题讨论】:

  • 您如何在 SWIFT 中做到这一点?

标签: iphone callback contacts addressbook abaddressbook


【解决方案1】:

问题已解决:

我在收到通知后发布了CFRelease(ab);。一旦我评论了那条线。我可以收到通知。

【讨论】:

  • 我有同样的问题 - 试图删除 CFRelease 但没有帮助......知道吗?我也在使用模拟器。
  • 您没有在 MyAddressBookExternalChangeCallback 委托中收到通知调用?
  • 不,callabck 根本没有被调用。我在模拟器和真实设备上都试过了。我的应用程序是否应该“在后台运行”才能正常工作?因为我没有配置 plist 中的特定键。但我看到我的应用程序正在返回相同的情况,所以我猜测默认是在后台运行...?
【解决方案2】:

使用地址簿回调。

void ABAddressBookRegisterExternalChangeCallback (
   ABAddressBookRef addressBook,
   ABExternalChangeCallback callback,
   void *context
);

我的示例 - 注册(创建 addressBookRef 后)

ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, self);

My Smaple - 做某事并取消注册

void addressBookChanged(ABAddressBookRef abRef, CFDictionaryRef dicRef, void *context) {

    NSLog(@"!!!!!Address Book Changed!");

    //Do Something You Need. (Recreate addressbook or Reload UITableView data.)

    ABAddressBookUnregisterExternalChangeCallback(abRef, addressBookChanged, context);
}

我的回答: Iphone addressbook

【讨论】:

  • 您确定这与从 iPhone 通讯簿更新通讯簿时相关吗?这个回调会被调用吗?
  • 是的,这段代码是我的应用程序的一部分。我确实检查过它工作正常。
  • 在我的示例中,@property (non-,ret-) ABAdressNookRef addrssbook;
  • 我确实在 (void)dealloc{} 中使用了 CFRelase(addressbook){}
  • 当我尝试添加属性时,我收到一条错误消息,指出它不是对象并且不能与非原子/保留选项一起使用。这里有点新蜜蜂 - 但所有函数都获取 ABAddressBookRef 而不是指针 (ABAddressBookRef*) 所以如果我将属性定义为返回指针 - 我应该将什么传递给其他方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多