我有一个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];
}
是否有任何理由不被召唤?
答案 0 :(得分:8)
事实证明,没有被调用的原因是一个简单的错误。我做了:
CFRelease(book);
设置通知后。我删除了它,它现在被调用。