Я не могу найти очевидный способ обнаружить удаление документа, который я отслеживаю (я кэширую список документов, о которых заботится мое приложение).
На устройстве 1: когда я удаляю документ, я вызываю
[fileCoordinator coordinateWritingItemAtURL:fileURL options:NSFileCoordinatorWritingForDeleting
error:&err byAccessor:^(NSURL* writingURL) {
[fileManager removeItemAtURL:writingURL error:nil];
Это отлично работает на Device1, все остается синхронизированным. На устройстве 2: я пытался полагаться на уведомления NSMetadataQuery
:
Исходный список файлов поступает нормально на NSMetadataQueryDidFinishGatheringNotification
Добавление/изменение документа проходит нормально через NSMetadataQueryDidUpdateNotification
Когда я удаляю файл на Устройстве 1, я получаю странный результат: приходит обновление NSMetadataQueryDidUpdateNotification
со всеми моими документами (кроме удаленного) в списке. Я не уверен, как я должен определить, что отсутствующий файл был удален или что уведомление об обновлении было для этой цели
Вопрос 1. Что следует проверять?
Я попробовал другой маршрут, который должен был зарегистрироваться как NSFilePresenter
для URL-адреса iCloud:
- (NSURL *)iCloudDocumentsURL
{
return [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil] URLByAppendingPathComponent:@"Documents"];
}
Теперь меня вызывают по протоколу NSFilePresenter
, когда файлы в этом URL-адресе изменяются, но логика для определения отсутствующего документа карательно медленная, поскольку обратный вызов нечеткий. Единственный ответ, который я получаю, это - (void)presentedItemDidChange;
. Я ожидал получить обратный вызов через - (void)accommodatePresentedSubitemDeletionAtURL:(NSURL *)url completionHandler:(void (^)(NSError *errorOrNil))completionHandler
, но этот метод никогда не вызывается.
Вопрос 2. Есть идеи, как заставить это работать?