Я провел несколько дней, пытаясь найти или выяснить для себя, как программно объединить UIDocument изменения, когда уведомление UIDocumentStateChangedNotification и состояние документа имеют UIDocumentStateInConflict set.
Все примеры, которые я могу найти (Яблоки, Рэй Вендерлих и т. Д. И т. Д.), Подробно описывают приглашение пользователя для выбора метода .Я не могу найти ни одного, который продемонстрировал бы правильный способ программного слияния.Это беспокоит меня, так как заставляет меня думать, что доверять слишком странно и, как правило, его избегают в качестве решения?Мой опыт работы с ним до сих пор укрепляет эту позицию.
Позвольте мне подробно рассказать о каждой проблемной области в моих попытках.
1) Как правильно читать содержимое текущего документа и NSFileVersion версии конфликта с целью слияния?Использование чего-либо с блоком завершения действительно беспорядочно в синхронизации. UIDocument openWithCompletionHandler: не заманчиво для использования.На самом деле, как правило, каков рекомендуемый способ только для чтения UIDocument ?Зачем открывать документ только для чтения?Я пытался использовать UIDocument readFromURL: , что хорошо для текущего документа, но если я пытаюсь использовать его для любого из конфликтов NSFileVersion версии, в которых он читает текущую версию, а не версию по URL-адресу (для подтверждения этого я использовал терминал MacOS, чтобы углубиться в файлы ../ data / .DocumentRevisions-V100 / PerUID / ...).Для конфликтных версий единственный способ, которым он работает для меня - это прямой доступ к этим файлам.(например, NSData initWithContentsOfFile: )
2) После того, как после прочтения вариантов файла и после слияния, как правильно сохранитьсливаться?Этот действительно не зарегистрирован нигде, где я могу найти.Единственный подход, с которым мне удалось, - это повторно использовать один из файлов конфликтов NSFileVersion , перезаписать его, а затем использовать UIDocument * replaceItemAtURL: чтобы сделать это актуальным.Я также пытался использовать UIDocument revertToContentsOfURL: после использования replaceItemAtURL: , но он просто вылетает без указания причины.Поскольку слияние, кажется, работает нормально без него, я не волнуюсь, но подумал, что я бы включил это как деталь.
3) Симулятор iPhone / iPad (V10.0) не уведомляет о конфликтах, покаЯ перезапускаю приложение.Это ожидать или я делаю что-то не так?Я спрашиваю, потому что в меню Debug симулятора есть Trigger iCloud Sync , который синхронизируется, но конфликты не отмечаются до следующей перезагрузки приложения.Это только ограничение симулятора?
Спасибо,