2011-07-15 148 views
2

在viewDidLoad中,我订阅了通知以获取外部回调通知。 我不知道为什么我没有在我的应用程序中得到通知,如果我改变了我的iPhone通讯录中的任何内容。iPhone地址簿外部回调通知?

我做了这种方式:

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

而且我在同一个控制器定义这个

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

我怎么能调试吗?我在模拟器中以这种方式尝试过。

  1. 我打开我的应用程序高达TGTextsInboxController的viewController
  2. 我按下home键,我的应用程序在后台
  3. 去nNow我已经打开iPhone通讯录,改变任何人的任何电话号码。
  4. 从背景再次打开应用程序到前台。
  5. 尚未反映任何通知。脱离指针都不会触及此方法“MyAddressBookExternalChangeCallback”

有什么问题吗?

+0

你如何做到这一点在SWIFT? – KarimIhab

回答

0

问题解决:

我被通知后释放CFRelease(ab);。只要我评论这一行。我能够收到通知。

+0

我有同样的问题 - 试图删除CFRelease,但没有帮助...任何想法?我也在模拟器上工作。 –

+0

您没有在MyAddressBookExternalChangeCallback委托中获取通知调用? – Tariq

+0

nope,callabck根本没有被调用。 我已经在模拟器和真实设备上尝试过它。 我的应用程序应该在后台运行吗? ,因为我没有配置plist中的特定键。但我看到我的应用程序正在返回到相同的情况,所以我猜想,自变量是在后台运行...? –

0

使用addressBook回拨。

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

我的样本 - 注册(创建addressBookRef后)

ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, self); 

我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

+0

您确定这与通讯簿从iPhone通讯簿更新时相关吗?这个回调会被调用吗? –

+0

是的,这段代码是我的应用程序的一部分。我没有检查它的工作正常。 – ChangUZ

+0

在我的示例中,@property(non-,ret-)ABAdressNookRef addrssbook; – ChangUZ