iOS: Как я могу объединить конфликтующие UIDocument в iCloud?

У меня проблемы с пониманием того, что мои варианты объединить 2 или более конфликтующих версий UIDocument хранится в iCloud. После обнаружения конфликта документов я в настоящее время использую removeOtherVersionsOfItemAtURL просто сохранить последнюю версию данных документа. Тем не менее, я хотел бы поддержать слияние противоречивых документов.

Единственные ресурсы и учебники, которые я нашел, относились к Core Data и постоянным хранилищам для слияния, а в примерах использовались такие вещи, как SQLite, который я не использую. В моем случае каждый документ - это отдельный файл.

Фон: мое приложение использует пользовательские NSObject подклассы (с соответствующими свойствами) для хранения данных. Они кодируются и декодируются (используя NSCoding + NSKeyedArchiver/NSKeyedUnarchiver) внутри UIDocument, Я настроил свое приложение для полноценной работы с iCloud. Это может сделать файлы вездесущими и наоборот, редактировать и удалять их.

Пожалуйста, помогите мне понять, что я могу сделать в отношении слияния конфликтующих UIDocument's!

1 ответ

Решение

Вы будете использовать NSFileVersion чтобы получить конфликтующие версии файла. Когда вы попадаете в конфликтное состояние, +unresolvedConflictVersionsOfItemAtURL дам тебе NSFileVersion экземпляры для любых версий, не считающихся "текущими". Затем вы можете использовать URL собственностью NSFileVersion чтобы получить содержимое этих конфликтующих версий.

Теперь у вас есть более одной версии документа. То, как вы решите конфликт, зависит от вас - изучите конфликтующие версии и объедините изменения любым подходящим для вашей структуры документа способом. Если вы сможете разрешить это в коде, вы, вероятно, возьмете некоторые данные из одной из конфликтных версий и скопируете их в текущую версию, пока текущая версия не будет содержать окончательную объединенную версию.

После этого сохраните документ, удалите конфликтующие версии (removeOtherVersionsOfItemAtURL:error:) и пометить текущую версию файла как разрешенную. Вы также можете использовать removeAndReturnError: на самом деле избавиться от старой версии (ы).

Более подробную информацию об этом можно найти в руководстве Apple по разрешению конфликтов версий документов.

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