Разработка основанного на документе приложения

Документы являются контейнерами для пользовательских данных, которые могут храниться в файлах локально и в iCloud. В основанном на документе проекте приложение позволяет пользователям создать и управлять документами, содержащими их данные. Одно приложение обычно обрабатывает многократные документы, каждого в его собственном окне, и часто выводит на экран больше чем один документ за один раз. Например, текстовой процессор обеспечивает команды для создания новых документов, он представляет среду редактирования, в которую пользователь вводит текст и встраивает графику в документ, он сохраняет на диск данные документа или iCloud, и он обеспечивает другие связанные с документом команды, такие как печать и управление версиями. В Какао основанный на документе проект приложения включен подсистемой, названной архитектурой документа, которая является частью платформы AppKit.

Документы в OS X

Существует несколько способов думать о документе. Концептуально, документ является контейнером для объема информации, который можно назвать и сохранены в файле. В этом смысле документ является объектом в памяти, владеющей и управляющей данными документа. Пользователям документ является их информацией — такой как текст и графика, отформатированная на странице. В контексте Какао документ является экземпляром пользовательского NSDocument подкласс, знающий, как представлять внутренне персистентные данные, которые он может вывести на экран в окне. Этот объект документа знает, как считать данные документа из файла и создать граф объектов в памяти для модели данных документа. Это также знает, как последовательно изменять ту модель данных и записывать данные документа обратно к диску. Так, объект документа посредничает между различными представлениями данных документа, как показано на рисунке 1-1.

  Файл документа рисунка 1-1, объект и модель данных

Используя iCloud, документы могут быть совместно использованы автоматически среди компьютеров и устройств на iOS пользователя. Система синхронизирует изменения в данных документа без вмешательства пользователя. См. Хранящие Документы в iCloud для получения дополнительной информации.

Архитектура документа обеспечивает много возможностей бесплатно

Основанный на документе стиль приложения является одним проектным решением среди нескольких, что необходимо рассмотреть при разработке приложения. Другой выбор включает приложения утилиты единственного окна, такие как Калькулятор и приложения «обувной коробки» стиля библиотеки, такие как iPhoto. Важно выбрать основной стиль приложения рано в процессе проектирования, потому что разработка берет очень отличающиеся пути в зависимости от того выбора. Если это целесообразно для Ваших пользователей создавать многократные дискретные наборы данных, каждые из которых они могут отредактировать в графической среде и хранилище в файлах, то необходимо запланировать разработать основанное на документе приложение.

Архитектура документа Какао служит основой для основанных на документе приложений, чтобы сделать следующие вещи:

Архитектура документа какао реализует большинство своих возможностей в трех классах. Эти классы взаимодействуют для обеспечения расширяемой инфраструктуры приложений, упрощающей для Вас создавать основанные на документе приложения. Таблица 1-1 кратко описывает эти классы.

Таблица 1-1  Основные классы в архитектуре документа

Класс

Цель

NSDocument

Создает, представляет и хранит данные документа

NSWindowController

Управляет окном, в котором выведен на экран документ

NSDocumentController

Управляет всеми объектами документа в приложении

Посмотрите Классы Что Основанные на документации поддержки Приложения для более подробной информации.

Храня Документы в 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: метод класса.