2011-07-15 77 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