Как определить, является ли локальный файл более новым при перемещении локальных файлов в iCloud?

Когда пользователь включает iCloud в моем приложении, мне нужно переместить все локальные файлы в iCloud. Здесь я использую setUbiquitous:itemAtURL:destinationURL:error: переместить каждый файл. Проблема заключается в том, что если (для любого локального файла) такой же URL-адрес файла уже существует в iCloud, этот метод завершается ошибкой.

У меня вопрос, как я могу определить, какой файл более новый (локальный по сравнению с iCloud), чтобы я мог либо перезаписать версию iCloud, либо отказаться от локальной версии для каждого файла? Или я мог бы как-то заставить iOS выполнить загрузку и установить состояние файла в конфликте на iCloud, чтобы мои методы разрешения конфликтов вступили во владение и справились с этим?

1 ответ

Решение

FWIW, из dox Apple они предлагают подход iCloud "все или ничего" - то есть, спросите пользователя в какой-то момент, должен ли iCloud быть включен или нет, и затем не меняются.

Тем не менее, для вашей ситуации я бы предложил следующие шаги после того, как пользователь включит iCloud:

1) Запустите NSMetaDataQuery с вездесущей областью действия, чтобы получить список файлов, уже находящихся в облаке для этого приложения. (Обратите внимание, что запрос должен выполняться в главном потоке, иначе вы ничего не получите).

2) Если у вас есть файл с тем же именем, вы можете использовать ключ последней измененной даты (NSMetadataItemFSContentChangeDateKey) в NSMetaData, чтобы выяснить, какой из них следует использовать (или любой другой подход, который вы хотите использовать для разрешения конфликта)

3) Если файл еще не находится в облаке, используйте метод setUbiquitous, чтобы поместить его туда.

Другие вопросы по тегам