Я хотел бы создать NSPersistentDocument
в Mac OS X и прочитать этот документ как UIManagedDocument
в iOS 7.
Это возможно?
Оба формата файлов совместимы?
Спасибо!
Я хотел бы создать NSPersistentDocument
в Mac OS X и прочитать этот документ как UIManagedDocument
в iOS 7.
Это возможно?
Оба формата файлов совместимы?
Спасибо!
Интересный вопрос - я могу подтвердить, что основные файлы данных ядра совместимы. У меня есть приложение для Mac и приложение для iOS, использующие один и тот же файл, который синхронизируется с помощью iCloud. Приложение представляет собой приложение, основанное на документах, и в настоящее время я храню фактический файл базы данных в iCloud, поэтому весь файл синхронизируется с iCloud.
Это работает нормально, но очевидно, что если пользователь открывает файл на двух устройствах и не заботится о сохранении и закрытии, есть вероятность, что его изменения могут быть отменены.
Apple одобрила приложение для Mac, которое использует стандартный NSPersistentDocument для создания и сохранения файлов. К сожалению, они отклонили приложения для iOS с какой-то неясной ссылкой на несоответствие их рекомендациям по хранению данных, заявив, что документы должны храниться в каталоге / Documents, если их необходимо создать резервную копию в iCloud. Что ж, если пользователь выбрал iCloud, я сохраняю файлы в расположении iCloud, предоставленном вызовами API.
В любом случае, я все еще жду от них ответа о том, что именно не так с этим подходом, поскольку он, похоже, тот же, что используется в Pages и других приложениях на основе документов.
Если я попытаюсь использовать UIManagedDocument, iOS создаст структуру папок и сохранит базу данных внутри этой структуры папок. Затем в диалоговом окне «Файл-> Открыть» приложения Mac отображается эта структура папок, а также файл, который по сути выглядит как обычный файл sqlite. Но тогда, возможно, OS X 10.8.4 не реализует новейший материал iCloud/Core Data — кто знает…
РЕДАКТИРОВАТЬ Вот ссылка на примеры кода и видео, демонстрирующие интеграцию приложений OSX и iOS с использованием Core Data и iCloud. http://ossh.com.au/design-and-technology/software-development/uimanageddocument-icloud-integration/
<iCloudContainerPath>/Documents
вы, скорее всего, храните свои файлы на корневом уровне контейнера, поскольку это путь, который вы получаете по умолчанию. Все, что находится на этом уровне, не может быть удалено таким же тонким прикосновением, как элементы на уровне /Documents (либо все, либо ничего). Если вы создаете приложение для обуви, в котором нет документов, есть только одно хранилище больших данных, которое хранится на корневом уровне контейнера.
- person theMikeSwan; 04.01.2014
Я согласен, что это определенно возможно. Я использую документ NSPersistent в OS X 10.8/10.9/10.10 с двоичным форматом данных ядра (без оберток - простые файлы). В iOS я использую UIDocument. Базовые данные прекрасно работают в обеих средах.
Apple заявляет, что NSPersistentDocument не поддерживает iCloud. Правильнее будет сказать, что он полностью не поддерживается. Большая часть поддержки NSDocument (включая доступ к библиотеке документов iCloud из версии 10.8) будет работать. Обработка конфликтующих файлов на открытых работах.
Вы не можете включить автоматическое сохранение (которое указано в качестве требования для документов iCloud в Руководстве по дизайну iCloud). Автосохранение работает асинхронно и определенно не поддерживается NSPersistentDocument.
Поэтому, если вы справляетесь с сохранением файлов и конфликтами, можно использовать документ NSPersistent. Есть некоторые особенности: так, например, если изменение iCloud поступает в OS X для открытого документа, нормальным ответом NSDocument будет автоматическое повторное открытие документа. Этого не происходит — и нет предупреждения о том, что файл изменился, пока вы не собираетесь сохранить файл. Но по крайней мере есть предупреждение. В iOS легче обнаруживать изменения по мере их возникновения с помощью UIDocumentStateChangedNotification.
NSDocument
и переопределить initWithType
, readFromURL
, saveDocument
, saveDocumentWithDelegate
, close
и makeWindowControllers
. Как только вы начнете создавать документы и создавать конфликты с хорошо оснащенным приложением, путь станет яснее. iOS проста в сравнении.
- person Michael Rourke; 15.03.2019