Используя FileWrappers как контейнеры файла

NSFileWrapper экземпляр содержит содержание файла в динамической памяти. В этой роли это позволяет объекту документа встроить файл, обрабатывая его как единицу информации, которая может быть выведена на экран как изображение (и возможно отредактирована на месте), сохраненный на диск, или передал к другому приложению. Это может также сохранить значок для представления файла в документе или в работе перетаскивания.

Экземпляры этого класса упоминаются как интерфейсные объекты файла, или просто как обертки файла. Обертка файла может быть одним из трех определенных типов: регулярная обертка файла, содержащая содержание единственного фактического файла; обертка каталога, содержащая каталог и все файлы или каталоги в нем; или обертка ссылки, просто представляющая символьную ссылку в файловой системе.

Поскольку цель обертки файла состоит в том, чтобы представлять файлы в памяти, она очень слабо связывается к любому дисковому представлению. Обертка файла не записывает путь к дисковому представлению его содержания. Это позволяет Вам сохранять ту же обертку файла с различным URLs, но она также требует, чтобы Вы записали тот URLs, если Вы хотите обновить обертку файла от диска позже.

Работа с обертками файла

Можно создать обертку файла из данных в памяти с помощью initWithSerializedRepresentation: метод или от данных по диску с помощью initWithURL:options:error: метод. Оба создают надлежащий тип обертки файла на основе природы сериализированного представления или файла на диске.

Три удобных метода каждый создает обертку файла определенного типа: initRegularFileWithContents:, initDirectoryWithFileWrappers:, и initSymbolicLinkWithDestination:. Поскольку каждый метод инициализации создает обертки файла различных типов или состояний, они все определяются инициализаторы для этого класса — подклассы должны обоснованно переопределить их всех по мере необходимости.

Некоторые методы обертки файла применяются только к определенному типу обертки, и исключение повышено, если метод отправил к обертке файла неправильного типа. Для определения типа обертки файла используйте isRegularFile, isDirectory, и isSymbolicLink методы.

Обертка файла хранит информацию о файловой системе (такую как время изменения и права доступа), который это обновляет при чтении из диска и использует при записи файлов в диск. fileAttributes метод возвращает эту информацию в формате, описанном в NSFileManager метод attributesOfItemAtPath:error:. Можно также установить атрибуты файла с помощью setFileAttributes: метод.

NSFileWrapper класс позволяет Вам устанавливать предпочтительное имя файла для операций сохранения, и он записывает последнее имя файла, к которому он был фактически сохранен; preferredFilename и filename методы возвращают эти имена. Эта функция является самой важной для оберток каталога, тем не менее, и так обсуждена при Работе с Обертками Каталога.

При сохранении обертки файла на диск Вы обычно определяете каталог, который Вы хотите сохранить ее в, затем добавить предпочтительное имя файла к тому каталогу URL и использовать writeToURL:options:originalContentsURL:error: метод, сохраняющий содержание обертки файла и обновляющий атрибуты файла. Можно сохранить обертку файла под другим именем, если Вам нравится, но это выполнение так может привести к зарегистрированному имени файла, отличающемуся от предпочтительного имени файла, в зависимости от того, как Вы вызываете writeToURL:options:originalContentsURL:error: метод.

Помимо сохранения на диск его содержания, обертка файла может перечитать их от диска при необходимости. matchesContentsOfURL: метод определяет возможно, ли дисковое представление, изменилось, на основе атрибутов файла сохранил в прошлый раз, когда файл был считан или записан. Если время изменения обертки файла или права доступа отличаются от тех из файла на диске, этот метод возвраты YES. Можно тогда использовать readFromURL:options:error: перечитывать файл от диска.

Наконец, для передачи обертки файла к другому процессу или системе (например, с помощью области монтажа), Вы используете serializedRepresentation метод для получения NSData объект, содержащий содержание обертки файла в NSFileContentsPboardType формат. Можно безопасно передать это представление по любому каналу, который Вы выбираете. Получатель представления может тогда перераспределить обертку файла с помощью initWithSerializedRepresentation: метод.

Работа с обертками каталога

Обертка каталога содержит другие обертки файла (любого типа) и позволяет Вам получать доступ к ним ключами, полученными из их предпочтительных имен файлов. Можно добавить любой тип обертки файла к обертке каталога с addFileWrapper: метод и удаляет его с removeFileWrapper: метод. Удобные методы addRegularFileWithContents:preferredFilename: и addSymbolicLinkWithDestination:preferredFilename: позвольте Вам добавлять регулярный файл и обертки ссылки, также определяя их предпочтительные имена.

Обертка каталога хранит свое содержание в NSDictionary объект, который можно получить использование fileWrappers метод. Ключи этого словаря основываются на предпочтительных именах файлов каждой обертки файла, содержавшейся в обертке каталога. Там существуйте, тогда, три идентификатора для обертки файла в обертке каталога:

При работе с содержанием обертки каталога можно использовать перечислитель словаря, чтобы получить каждую обертку файла и выполнить безотносительно работы, в которой Вы нуждаетесь. За исключениями сохранения и обновления, обертка файла каталога не определяет рекурсивных операций для своего содержания. Чтобы установить атрибуты файла для всех содержавших оберток файла или выполнить любую другую такую работу, необходимо определить рекурсивный метод, исследующий тип каждой обертки файла и вызывающий себя снова для любой обертки каталога, с которой это встречается.

При сохранении оберток файла каталога к контейнеру iCloud необходимо экспортировать должным образом отформатированный UTI для документа. Для получения дополнительной информации посмотрите Работу С Обертками Файла.