Я использую ABAddressBookRegisterExternalChangeCallback для регистрации, если в базу данных AddressBook внесены изменения. У меня он работает отлично для меня и я могу получать уведомления, но они работают только тогда, когда приложение работает.Работает ли ABAddressBookRegisterExternalChangeCallback, даже когда приложение завершено
После того, как приложение было убито (завершено), а затем перезапущено, оно не распознает изменения в течение этого времени между kill и restart.
Есть ли способ обнаружить эти изменения или был разработан для работы таким образом?
Пример кода, который я использую -
в viewDidLoad -
CFErrorRef error = NULL;
addressBook = ABAddressBookCreateWithOptions(NULL, &error);
ABAddressBookRegisterExternalChangeCallback(addressBook,addressBookChanged,(__bridge void *)(self));
И обратного
void addressBookChanged(ABAddressBookRef reference, CFDictionaryRef dictionary, void *context) {
NSLog(@"There was a change in the addressbook");
Я сделал сильный мозговой штурм на этом. И сохранение размера не будет работать. Что, если это +1 и -1. Изменение размера будет нулевым, но будут изменения в контактах. То, как я обрабатываю это, - это использование основных данных. Храните все синхронизированные/используемые контакты в модели coredata, у каждого контакта есть идентификатор, а затем вы можете сравнить это с тем, что находится в ABAddressBook. – VaibhavAggarwal
Да, это имеет смысл - но вы не можете измерить фактический размер файла адресной книги, а не просто количество контактов - что-то гораздо более тонкое. Несмотря на то, что это было бы теоретически несовершенным, это могло бы в значительной степени в любой мыслимой ситуации дать вам точную меру изменений. – Karoh
Снова основная проблема заключается в том, что вы не можете быть уверены в размере. Такое же количество байтов можно удалить и записать. Подумайте о каждом контакте как сущности, вы должны иметь возможность находить разницу для каждого поля для каждого объекта. И вы можете сделать это только в том случае, если вы сохранили предыдущую версию данных, с которой можно сравнивать. – VaibhavAggarwal