2

我有一个使用 AddressBook.framework 并使用 Core Data 存储这些联系人的 iPhone 应用程序。为了确保在更新通讯簿时我更新自己的数据库(无论是通过 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];
}

有什么理由不叫它吗?

4

1 回答 1

8

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

CFRelease(book);

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

于 2010-04-25T11:52:58.347 回答