未调用地址簿回调

Oli*_*ver 2 iphone objective-c addressbook

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

ABAddressBookRef book = ABAddressBookCreate();
ABAddressBookRegisterExternalChangeCallback(book, addressBookChanged, self);
Run Code Online (Sandbox Code Playgroud)

哪个(据说)在任何编辑时调用它.我有一个允许编辑的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];
}
Run Code Online (Sandbox Code Playgroud)

它有什么理由不被称为?

Oli*_*ver 8

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

CFRelease(book);
Run Code Online (Sandbox Code Playgroud)

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