2013-02-14 2 views
1

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

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

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

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

ответ

4

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

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

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

Более подробную информацию об этом можно найти в Apple's guide for resolving document version conflicts.

+0

как раз для того чтобы подтвердить, что нет возможности автоматически определить iOS как слить изменения? Я бы предположил, что может произойти некоторое замедление, если изменения нуждаются в программном слиянии ... – Anton

+0

Нет, ваша структура документа может быть ** ничего **, iOS не может автоматически определить, как разрешать конфликты в произвольных данных коллекции. Если вы использовали Core Data, он мог бы попытаться разрешить каждое свойство. –

Смежные вопросы