未调用地址簿回调

时间:2010-04-24 23:59:31

标签: iphone objective-c addressbook

我有一个iPhone应用程序,它使用AddressBook.framework并使用Core Data来存储这些联系人。为了确保在更新地址簿时更新我自己的数据库(无论是通过MobileMe还是在我自己的应用程序中进行编辑),我正在订阅有关通讯簿何时更新的通知。我在启动时调用它:

ABAddressBookRef book = ABAddressBookCreate();
ABAddressBookRegisterExternalChangeCallback(book, addressBookChanged, self);

哪个(据说)在任何编辑时调用它。我有一个允许编辑的ABPersonViewController,而且似乎永远不会调用addressBookChanged。

void addressBookChanged(ABAddressBookRef reference, CFDictionaryRef dictionary, void *context) {
    // The contacts controller we need to call
    ContactsController *contacts = (ContactsController *)context;

    // Sync with the Address Book
    [contacts synchronizeWithAddressBook:reference];
}

是否有任何理由不被召唤?

1 个答案:

答案 0 :(得分:8)

事实证明,没有被调用的原因是一个简单的错误。我做了:

CFRelease(book);

设置通知后。我删除了它,它现在被调用。