Разработка основанного на документе приложения
Документы являются контейнерами для пользовательских данных, которые могут храниться в файлах локально и в iCloud. В основанном на документе проекте приложение позволяет пользователям создать и управлять документами, содержащими их данные. Одно приложение обычно обрабатывает многократные документы, каждого в его собственном окне, и часто выводит на экран больше чем один документ за один раз. Например, текстовой процессор обеспечивает команды для создания новых документов, он представляет среду редактирования, в которую пользователь вводит текст и встраивает графику в документ, он сохраняет на диск данные документа или iCloud, и он обеспечивает другие связанные с документом команды, такие как печать и управление версиями. В Какао основанный на документе проект приложения включен подсистемой, названной архитектурой документа, которая является частью платформы AppKit.
Документы в OS X
Существует несколько способов думать о документе. Концептуально, документ является контейнером для объема информации, который можно назвать и сохранены в файле. В этом смысле документ является объектом в памяти, владеющей и управляющей данными документа. Пользователям документ является их информацией — такой как текст и графика, отформатированная на странице. В контексте Какао документ является экземпляром пользовательского NSDocument
подкласс, знающий, как представлять внутренне персистентные данные, которые он может вывести на экран в окне. Этот объект документа знает, как считать данные документа из файла и создать граф объектов в памяти для модели данных документа. Это также знает, как последовательно изменять ту модель данных и записывать данные документа обратно к диску. Так, объект документа посредничает между различными представлениями данных документа, как показано на рисунке 1-1.
Используя iCloud, документы могут быть совместно использованы автоматически среди компьютеров и устройств на iOS пользователя. Система синхронизирует изменения в данных документа без вмешательства пользователя. См. Хранящие Документы в iCloud для получения дополнительной информации.
Архитектура документа обеспечивает много возможностей бесплатно
Основанный на документе стиль приложения является одним проектным решением среди нескольких, что необходимо рассмотреть при разработке приложения. Другой выбор включает приложения утилиты единственного окна, такие как Калькулятор и приложения «обувной коробки» стиля библиотеки, такие как iPhoto. Важно выбрать основной стиль приложения рано в процессе проектирования, потому что разработка берет очень отличающиеся пути в зависимости от того выбора. Если это целесообразно для Ваших пользователей создавать многократные дискретные наборы данных, каждые из которых они могут отредактировать в графической среде и хранилище в файлах, то необходимо запланировать разработать основанное на документе приложение.
Архитектура документа Какао служит основой для основанных на документе приложений, чтобы сделать следующие вещи:
Создайте новые документы. В первый раз, когда пользователь принимает решение сохранить новый документ, он представляет диалоговое окно, в котором имена пользователей и сохраняет документ в дисковом файле в выбранном пользователями расположении.
Откройте существующие документы, хранившие в файлах. Основанное на документе приложение указывает типы файлов документов, которые оно может считать и записать, а также типы только для записи и только для чтения. Это может представлять данные различных типов документов внутренне и вывести на экран данные соответственно.
Автоматически сохраните документы. Основанные на документе приложения могут принять автоматическое сохранение на месте, и его документы автоматически сохраняются в подходящее время так, чтобы данные, которые пользователь видит на экране, были эффективно тем же, поскольку это экономило на диске. Сохранение сделано безопасно, так, чтобы прерванная работа сохранения не оставляла данные противоречивыми. Для предотвращения автоматического сохранения непреднамеренных изменений старые файлы заблокированы от редактирования, пока явно не разблокировано пользователем.
Асинхронно считайте и запишите данные документа. Чтение и запись сделаны асинхронно на фоновом потоке, так, чтобы длинные операции не делали пользовательский интерфейс приложения безразличным. Кроме того, чтения и записи координируются с помощью
NSFilePresenter
протокол иNSFileCoordinator
класс для сокращения конфликтов версий.Управляйте многократными версиями документов. Автосохранение создает версии равномерно, и пользователи могут вручную сохранить версию каждый раз, когда они желают. Пользователи могут просмотреть версии и вернуться содержание документа к выбранной версии с помощью подобного машине времени интерфейса. Браузер версии также используется для разрешения конфликтов версий от одновременных обновлений iCloud.
Документы печати. Пользователи могут указать, что различные макеты страницы в диалоговом окне печати и странице устанавливают диалоговое окно.
Изменения дорожки и набор отредактированное состояние документа. Документ управляет своим отредактированным состоянием и реализует многоуровневую отмену и восстановление.
Проверьте пункты меню. Документ включает или отключает пункты меню автоматически, в зависимости от его отредактированного состояния и применимости связанных методов действия.
Приложение дескриптора и делегация окна. Уведомления отправляются, и методы делегата зашли в значительные события жизненного цикла, такой как тогда, когда завершается приложение.
Архитектура документа какао реализует большинство своих возможностей в трех классах. Эти классы взаимодействуют для обеспечения расширяемой инфраструктуры приложений, упрощающей для Вас создавать основанные на документе приложения. Таблица 1-1 кратко описывает эти классы.
Класс | Цель |
---|---|
| Создает, представляет и хранит данные документа |
| Управляет окном, в котором выведен на экран документ |
| Управляет всеми объектами документа в приложении |
Посмотрите Классы Что Основанные на документации поддержки Приложения для более подробной информации.
Храня Документы в iCloud
Технология хранения iCloud позволяет Вам совместно использовать документы и другие данные приложения среди многократных компьютеров, выполняющих Ваше основанное на документе приложение. Если у Вас есть соответствующая версия iOS Вашего приложения, можно совместно использовать документы и данные приложения с устройствами на iOS также. Как только Ваше приложение устанавливает надлежащие соединения, iCloud автоматически продвигает документы и изменения во всех устройствах, выполняющих экземпляр Вашего приложения без явного вмешательства пользователя.
Существует два вида хранения в iCloud: хранение документов и хранение данных значения ключа. Хранение документов разработано для хранения больших объемов данных, таких как это в файле документа. Хранение значения ключа разработано для мелких сумм данных приложения, таких как данные конфигурации. Например, Вы могли бы сохранить текст и иллюстрации для книги в хранении документов, и Вы могли бы сохранить расположение страницы читателя в хранении значения ключа. Тот путь, каждый раз, когда пользователь открывает документ о любом устройстве, корректная страница, выведен на экран.
Документы и данные значения ключа, определяемые для хранения в iCloud, передаются iCloud и другим компьютерам пользователя как можно скорее. В то время как сами данные файла передаются по требованию, на устройствах на iOS только метаданные файла передаются с iCloud на устройства как можно скорее. Как только данные хранились первоначально в iCloud, только изменения передаются после того, для создания синхронизации самой эффективной.
NSDocument
координация файла реализаций, управление версиями и разрешение конфликтов среди документов, таким образом, это обеспечивает самый простой путь к использованию iCloud. Для получения дополнительной информации объясняя, как обработать хранение документов в iCloud, посмотрите Движущиеся Данные Документа к и от iCloud.
Архитектура документа поддерживает тестовую среду приложения
Архитектура документа помогает основанным на документе приложениям принять Тестовую среду приложения, технологию управления доступом, обеспечивающую последнюю строку защиты против украденного, поврежденного или данных удаленного пользователя, если вредоносный код использует Ваше приложение. NSDocument
когда пользователь открывает и сохраняет документы или использует перетаскивание, класс автоматически работает с Блоком питания для предоставления доступа к элементам доступными для приложения. NSDocument
также предоставляет поддержку для хранения документов в Вашей песочнице, если пользователь перемещает их использующий Средство поиска. Для получения дополнительной информации о Тестовой среде приложения, см. Руководство по проектированию Тестовой среды приложения.
Соображения для разработки Вашей модели данных документа
Ваша модель данных документа является объектом или графиком соединенных объектов, содержащих данные, которыми, выведенные на экран и управляют Ваши объекты документа.
Какао использует шаблон разработки Контроллера представления Модели
Архитектура документа Какао и много других технологий всюду по Какао используют шаблон разработки Model-View-Controller (MVC). Объекты модели инкапсулируют данные, определенные для приложения, и управляют и обрабатывают те данные. Объекты представления выводят на экран данные от объектов модели приложения и включают редактирование тех данных пользователями. Контроллер возражает действию как посредникам между объектами представления приложения и объектами модели. Путем разделения этих способов поведения на дискретные объекты код приложения имеет тенденцию быть более допускающим повторное использование, интерфейсы объекта лучше определяются, и приложение проще поддержать и расшириться. Возможно, самое главное MVC-совместимое приложение возражает адаптации беспрепятственно в архитектуру документа.
Модель данных соответствует типу документа
Объект документа является контроллером, выделенным управлению объектами в модели данных документа. Каждый объект документа является пользовательским подклассом NSDocument
специально разработанный для обработки определенного типа модели данных. Основанные на документе приложения в состоянии обработать один или несколько типов документов, каждого с его собственным типом модели данных и соответствующий NSDocument
подкласс. Приложения используют информационный файл списка свойств, который хранят в пакете приложения и называют, по умолчанию, <appName>-Info.plist
, указать информацию, которая может использоваться во время выполнения. Основанные на документе приложения используют этот список свойств для указания типов документов, которые приложение может отредактировать или просмотреть. Например, когда NSDocumentController
объект создает новый документ или открывает существующий документ, он ищет список свойств такие элементы как класс документа, обрабатывающий тип документа, универсальный идентификатор типа (UTI) для типа, и может ли приложение отредактировать или только просмотреть тип. Для получения дополнительной информации о создании списка свойств для типов документов, посмотрите Завершенный информационный Список свойств.
Хранение модели данных
Любые объекты, которые являются частью постоянного состояния документа, нужно считать частью модели того документа. Например, демонстрационное приложение Эскиза имеет подкласс NSDocument
именованный SKTDocument
. Объекты этого класса имеют массив SKTGraphic
объекты, содержащие данные, определяющие Эскиз форм, могут нарисовать, таким образом, они формируют модель данных документа. Помимо фактического SKTGraphic
объекты, однако, SKTDocument
объект содержит некоторые дополнительные данные, которые нужно технически считать частью модели, такой как порядок графики в массиве документа, определяющем упорядочивание грудь-спина SKTGraphic
объекты.
Как любое основанное на документе приложение, Эскиз в состоянии записать данные от своей модели данных до файла и наоборот. Чтение и запись являются ответственностью SKTDocument
объект. Эскиз реализует NSDocument
основанный на данных метод записи, сглаживающий его объекты модели данных в NSData
объект прежде, чем записать его в файл. С другой стороны это также реализует основанное на данных NSDocument
чтение метода для перераспределения его модели данных в памяти от NSData
возразите, что это читает из одних из его файлов документов.
Существует три способа, которыми можно реализовать считывание данных и запись возможностей в основанном на документе приложении:
Чтение и запись собственных типов объектов.
NSDocument
имеет методы, читающие и пишущиеNSData
иNSFileWrapper
объекты исходно. Необходимо переопределить по крайней мере один метод записи преобразовать данные из внутренних структур данных модели документа вNSData
объект илиNSFileWrapper
объект в подготовке к записи в файл. С другой стороны необходимо также переопределить по крайней мере один метод чтения для преобразования данных изNSData
илиNSFileWrapper
объект во внутренние структуры данных модели документа в подготовке к отображению данных в окне документа. Посмотрите Создание Подкласса NSDocument для большего количества подробных данных о чтении документа и методах записи.Используя Базовые Данные. Если Вы имеете большой набор данных или требуете модели управляемого объекта, можно хотеть использовать
NSPersistentDocument
создать основанное на документе приложение, использующее Базовую платформу Данных. Базовые Данные являются технологией для управления графом объектов и персистентности. Одно из персистентных хранилищ, предоставленных Базовыми Данными, основывается на SQLite. Несмотря на то, что Базовые Данные являются передовой технологией, требующей понимания фундаментальных шаблонов разработки Какао и парадигм программирования, они дают много преимуществ основанному на документе приложению, таких как:Инкрементное чтение и запись данных документа
Совместимость данных для приложений с iOS и версиями OS X
Для получения дополнительной информации посмотрите Базовую Начальную точку Данных.
Форматы пользовательского объекта. Если необходимо считать и записать объекты без использования
NSData
иNSFileWrapper
, можно переопределить другойNSDocument
методы для этого, но Ваш код должны копировать чтоNSDocument
делает для Вас. Естественно, это означает, что Ваш код будет иметь большую сложность и большую возможность ошибки.
Обработка Совместно используемой Модели данных в OS X и iOS
Используя iCloud, документ может быть совместно использован основанными на документе приложениями в OS X и iOS. Однако существуют различия между платформами, которые необходимо учесть. Для приложения для редактирования того же документа в iOS и OS X информация о типе документа должна быть непротиворечивой. Другие межплатформенные соображения для совместимости данных документа:
Некоторые технологии доступны на одной платформе, но не другом. Например, если Вы будете использовать формат Rich Text Format (RTF) в качестве формата документа в OS X, то он не будет работать в iOS, потому что его текстовая система не имеет встроенной поддержки формата RTF (несмотря на то, что можно реализовать ту поддержку в приложении для iOS).
Система координат по умолчанию для каждой платформы отличается, который может влиять, как нарисовано содержание. См. “Системы координат по умолчанию и Рисующий в iOS” в Рисовании и Печати Руководства для iOS для обсуждения этой темы.
При архивации графика объекта модели документа Вы, возможно, должны выполнить подходящее использование преобразований
NSCoder
методы, когда Вы кодируете и декодируете объекты модели.Некоторые соответствующие классы являются несовместимыми через платформы. Т.е. существуют существенные различия между классами, представляющими цвета (
UIColor
иNSColor
), изображения (UIImage
иNSImage
), и пути Безье (UIBezierPath
иNSBezierPath
).NSColor
объекты, например, определяются с точки зрения цветового пространства (NSColorSpace
), но в UIKit нет никакого класса цветового пространства.
Эти межплатформенные проблемы влияют на способ, которым Вы храните данные документа в файле, совместно использующемся OS X и iOS как документ iCloud. Обе версии Вашего приложения должны быть в состоянии перераспределить применимую модель данных в памяти, которая является надлежащей ее платформе, с помощью доступных технологий и классов, не теряя точности. И, конечно, обе версии должны быть в состоянии преобразовать свои специфичные для платформы структуры модели данных в формат совместно используемого файла.
Одна стратегия, которую можно использовать, к выпадающему к платформе низшего уровня, совместно использующейся обеими платформами. Например, на стороне iOS, UIColor
определяет a CIColor
имущественные ценности Базовый Объект изображения, представляющий цвет; на стороне OS X Ваше приложение может создать NSColor
объект от CIColor
объект с помощью colorWithCIColor:
метод класса.