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 по разрешению конфликтов версий документов.