Имам приложение за 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];
}
Има ли причина да не се нарича това?
Отговори:
8 за отговор № 1Оказва се, че причината, поради която не е била наречена, е просто грешка.
CFRelease(book);
След задаване на известието. Премахнах това и сега го наричат.