Пакеты документов

Если Ваши форматы файла документа становятся слишком сложными для управления из-за нескольких разрозненных типов данных, Вы могли бы рассмотреть принятие формата пакета для Ваших документов. Пакеты документов дают иллюзию единого документа пользователям, но предоставляют Вам гибкость в том, как Вы храните данные документа внутренне. Особенно при использовании нескольких различных типов стандартных форматов данных, таких как JPEG, GIF или XML, пакеты документов делают доступ и управление теми данными намного проще.

Определение структуры каталогов документа

Apple не предписывает определенной структуры для пакетов документов. Содержание и организацию каталога пакета оставляют Вам. Вы призваны, однако, создать или плоскую структуру каталогов или использовать структуру пакета платформы, вовлекающую размещение Ваших файлов в верхний уровень Resources подкаталог. (Для получения дополнительной информации о структуре пакета платформ, посмотрите Пакеты Платформы.)

Регистрация Вашего типа документа

Для регистрации документа как пакета необходимо изменить информацию о типе документа в информационном списке свойств приложения (Info.plist) файл. CFBundleDocumentTypes информация о базах ключей о типах документов Ваша поддержка приложений. Для каждого типа пакета документов включайте LSTypeIsPackage ключ с надлежащим значением. Присутствие этого ключа говорит Finder and Launch Services обрабатывать каталоги с данным расширением файла как пакет. Для получения дополнительной информации о Info.plist ключи, посмотрите информационную Ключевую Ссылку Списка свойств.

Пакеты документов должны всегда иметь расширение для идентификации их — даже при том, что то расширение может быть скрыто пользователем. Расширение позволяет Средству поиска идентифицировать Ваш каталог документа и обрабатывать его как пакет. Вы никогда не должны связывать пакет документов с типом MIME или 4-байтовым типом OS.

Создание нового пакета документов

Когда это - время для Вашего приложения для создания нового документа, это может сделать так одним из двух способов:

Если Вы создаете приложение Какао, NSFileWrapper класс является предпочтительным способом создать пакеты документов, потому что это соединяется с существующей поддержкой в NSDocument для чтения и записи Вашего содержания документа. ( NSFileWrapper класс также доступен в iOS 4.0 и позже как часть платформы Основы.) Для получения информации о том, как использовать этот класс, посмотрите Ссылку класса NSFileWrapper.

Если Вы пишете инструмент командной строки или другой тип приложения, не использующего высокоуровневые платформы Objective C (такие как AppKit или UIKit), можно все еще создать пакеты документов вручную. Важная вещь помнить о создании пакета документов состоит в том, что это - просто каталог. Пока тип пакета документов регистрируется (как описано в Регистрации Вашего Типа документа), все, что необходимо сделать, создают каталог с надлежащим расширением файла. (Средство поиска использует расширение файла в качестве своего сигнала для обработки каталога как пакета.) Можно создать каталог (и создать любые файлы, Вы хотите вставить тот каталог), использование стандартных подпрограмм файловой системы BSD или использование NSFileManager класс в платформе Основы.

Доступ к содержанию документа

Существует несколько способов получить доступ к содержанию пакета документов. Поскольку пакет документов является каталогом, можно получить доступ к содержанию документа с помощью любых надлежащих подпрограмм файловой системы. При использовании структуры пакета для пакета документов можно также использовать NSBundle или CFBundleRef подпрограммы. Использование структуры пакета является особенно подходящим для документов, хранящих многократные локализации.

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

Если Вы создаете приложение Какао, необходимо также не забыть настраивать путь Ваш NSDocument разделите на подклассы загружает содержание пакета документов. Традиционный метод использования readFromData:ofType:error: и dataOfType:error: методы, чтобы читать и записать данные предназначаются для единственного документа файла. Для обработки пакета документов необходимо использовать readFromFileWrapper:ofType:error: и fileWrapperOfType:error: методы вместо этого. Для получения информации о чтении и записи данных документа от Вашего NSDocument разделите на подклассы, см. Основанный на документе Обзор Приложений.