Доступ к документам

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

Сторонние разработчики могут также создать свои собственные источники с помощью расширения Провайдера Документа. Эти расширения предоставляют ограниченный доступ к контейнеру группы, совместно использованному расширением и его содержанием приложения.

Средство выбора документа обеспечивает четыре основных операции: импорт, экспорт, открытый, и перемещение. Каждая работа имеет свой собственный уникальный набор функций, и важно выбрать корректную работу для задачи под рукой. Можно разделить эти операции на основе направления, Вы перемещаете документы. Импорт и операции открытия позволяют пользователю выбрать внешний файл и принести его в Ваше приложение. Экспорт и операции пересылки берут локальные файлы и отправляют их во внешний источник.

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

Как представить средство выбора документа

Независимо от того, который из этих четырех операций Вы используете, существует два способа представить средство выбора документа.

Представьте меню доступных провайдеров документа

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

Можно также добавить дополнительные элементы или к вершине или к нижней части этого списка путем вызова addOptionWithTitle:image:order:handler: метод. Если пользователь выбирает один из этих элементов, системные вызовы его обработчик.

Для представления меню документа инстанцируйте копии UIDocumentMenuViewController класс, набор его делегат, добавляют любые дополнительные элементы, которые Вы хотите и представляете его пользователю. Для поэтапных инструкций посмотрите Установку Работы Импорта.

../Art/Document Menu_2x.png

Представьте последний раз используемое средство выбора документа

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

Для представления контроллера представления средства выбора документа инстанцируйте копии UIDocumentPickerViewController класс, набор его делегат и настоящее это пользователю. Для поэтапных инструкций посмотрите Установку Работы Импорта.

../Art/Document Picker_2x.png

Копирование файлов со средством выбора документа

Используйте импорт и экспортируйте операции для копирования файлов в или из песочницы приложения. Во многих отношениях это поведение подобно пути UIDocumentInteractionController меню «Open in» класса ведет себя. Но тогда как контроллер взаимодействия документа вынудил пользователей оставить Ваше приложение, найдите файл, и затем возвратите его к своему приложению; работа импорта позволяет пользователям передать файлы, никогда не оставляя Ваше приложение. Это приводит к потоку операций, который и более удобен и проще понять. Импорт и операции экспорта также позволяют пользовательским файлам доступа от любых расширений Провайдера Документа, которые они установили на их устройствах. В случае Диска iCloud это означает, что пользователи могут импортировать и экспортировать от контейнера iCloud любого приложения, включившего доступ к его хранению документов iCloud.

Эта модель совместного использования является очень простой и прямой. Фактически, его основное преимущество прибывает из его простоты. Вы всегда работаете с отдельной, локальной копией данных; поэтому, Вы не должны использовать координацию файла или ограниченный по объему безопасностью URLs. Однако, потому что каждое приложение использует свою собственную копию документа, этот подход использует дополнительное пространство памяти и мешает обрабатывать единый документ с многократными приложениями. Копирование может все еще быть предпочтено при работе с совокупными документами, например документом богато-форматированного-текста, который может включать изображения или видео. Часто, Вы хотите импортировать эти активы, давая Вашему совокупному документу его собственную, частную копию файлов ресурсов.

Установка Работы Импорта

Для установки работы импорта используйте один из процессов, описанных затем.

Вывести на экран меню документа

  1. Инстанцируйте a UIDocumentMenuViewController объект путем вызова initWithDocumentTypes:inMode:. Передача в массиве UTIs представление типов документов Вы хотите импортировать и UIDocumentPickerModeImport режим.

  2. Добавьте любые опции путем вызова addOptionWithTitle:image:order:handler:.

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

  3. Установите делегата контроллера меню.

    Контроллер представления меню вызывает делегата documentMenu:didPickDocumentPicker: метод, когда пользователь выбирает определенное средство выбора документа. Этот метод должен установить предоставленного делегата контроллера представления средства выбора документа и представить его. Для получения дополнительной информации посмотрите Настоящее Последний раз Используемое Средство выбора Документа.

    Контроллер представления меню также вызывает делегата documentMenuWasCancelled: метод, когда пользователь отклоняет меню.

  4. Представьте контроллер меню.

UIDocumentMenuViewController *importMenu =
[[UIDocumentMenuViewController alloc] initWithDocumentTypes:[self UTIs]
                                                     inMode:UIDocumentPickerModeImport];
 
importMenu.delegate = self;
[self presentViewController:importMenu animated:YES completion:nil];
let importMenu = UIDocumentMenuViewController(documentTypes: self.UTIs, inMode: .Import)
importMenu.delegate = self
self.presentViewController(importMenu, animated: true, completion: nil)

Вывести на экран средство выбора документа непосредственно

  1. Инстанцируйте a UIDocumentPickerViewController объект путем вызова initWithDocumentTypes:inMode:. Передача в массиве UTIs представление типов документов Вы хотите импортировать и UIDocumentPickerModeImport режим.

  2. Установите делегата контроллера средства выбора документа.

    Средство выбора документа вызывает делегата documentPicker:didPickDocumentAtURL: метод, когда пользователь выбирает файл. URL указывает на временный файл в песочнице приложения. Файл остается доступным, пока не закрывается приложение.

    Средство выбора документа также вызывает делегата documentPickerWasCancelled: метод, когда пользователь отклоняет средство выбора документа.

  3. Представьте контроллер представления средства выбора.

-(void)documentMenu:(UIDocumentMenuViewController *)documentMenu didPickDocumentPicker:(UIDocumentPickerViewController *)documentPicker
 
{
    documentPicker.delegate = self;
    [self presentViewController:documentPicker animated:YES completion:nil];
}
func documentMenu(documentMenu: UIDocumentMenuViewController!,
    didPickDocumentPicker documentPicker: UIDocumentPickerViewController!) {
        
        documentPicker.delegate = self
        self.presentViewController(documentPicker, animated: true, completion: nil)
}

Установка работы экспорта

Работа экспорта использует ту же основную установку в качестве работы импорта со следующими различиями:

  • Для отображения меню документа инстанцируйте a UIDocumentMenuViewController объектное использование initWithURL:inMode:. Передача в URL файла Вы хотите экспортировать и UIDocumentPickerModeExportToService режим.

  • Для отображения средства выбора документа непосредственно инстанцируйте a UIDocumentPickerViewController объект путем вызова initWithURL:inMode:. Передача в URL файла Вы хотите экспортировать и UIDocumentPickerModeExportToService режим.

  • Средство выбора документа вызывает делегата documentPicker:didPickDocumentAtURL: метод, когда пользователь выбирает место назначения вне песочницы Вашего приложения. Система сохраняет копию Вашего документа указанному месту назначения. Средство выбора документа обеспечивает URL копии для указания успеха; однако, Ваше приложение не имеет доступа к файлу именуемым этим URL.

Доступ к файлам вне песочницы

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

Однако эти операции также представляют значительное отбытие от традиционной обработки документов iOS. Дополнительная гибкость добавляет уровень дополнительной сложности. Это также налагает много дополнительных требований.

Требования

Любое приложение, что документы доступов вне его песочницы должны удовлетворить следующие требования:

  • Ваше приложение должно выполнить все операции чтения файла и операции записи с помощью координации файла.

  • При отображении содержания документа пользователю необходимо отследить использование документа состояния предъявителя файла. Если Вы только показываете список файлов, предъявитель файла не необходим.

  • Не сохраняйте URLs, к которому получают доступ посредством операций открытия или операций пересылки. Всегда открывайте документ с помощью средства выбора документа, запроса метаданных или ограниченной по объему безопасностью закладки к URL.

  • Эти операции возвращают ограниченный по объему безопасностью URLs. Необходимо вызвать startAccessingSecurityScopedResource прежде, чем получить доступ к URL.

  • Если startAccessingSecurityScopedResource возвраты YES, вызвать stopAccessingSecurityScopedResource когда Вы сделаны с помощью файла.

  • При использовании подкласса UIDocument он автоматически использует ограниченный по объему безопасностью URLs для Вас. Нет никакой потребности вызвать startAccessingSecurityScopedResource или stopAccessingSecurityScopedResource. UIDocument также действует как предъявитель файла и автоматически обрабатывает координацию файла. По этим причинам, с помощью подкласса UIDocument настоятельно рекомендован для всех файлов вне песочницы приложения.

Установка операции открытия

Операция открытия использует ту же основную установку в качестве работы импорта со следующими различиями:

  • Для отображения меню документа, инстанцируют a UIDocumentMenuViewController объектное использование initWithDocumentTypes:inMode:. Передача в массиве UTIs представление типов документов Вы хотите импортировать и UIDocumentPickerModeOpen режим.

  • Для отображения средства выбора документа непосредственно инстанцируйте a UIDocumentPickerViewController объект путем вызова initWithDocumentTypes:inMode:. Передача в массиве UTIs представление типов документов Вы хотите импортировать и UIDocumentPickerModeOpen режим.

  • Средство выбора документа вызывает делегата documentPicker:didPickDocumentAtURL: метод, когда пользователь выбирает документ. Вам дают ограниченный по объему безопасностью URL для того документа. Для получения дополнительной информации об использовании ограниченного по объему безопасностью URLs посмотрите Требования.

Установка операции пересылки

Операция пересылки использует ту же основную установку в качестве работы импорта со следующими различиями:

  • Инстанцируйте a UIDocumentMenuViewController объектное использование initWithURL:inMode:. Передача в URL файла Вы хотите использовать и UIDocumentPickerModeMoveToService режим.

  • Инстанцируйте a UIDocumentPickerViewController объект путем вызова initWithURL:inMode:. Передача в URL файла Вы хотите переместиться и UIDocumentPickerModeMoveToService режим.

  • Средство выбора документа вызывает делегата documentPicker:didPickDocumentAtURL: метод, когда пользователь выбирает место назначения. Файл сохранен этому месту назначения. Исходный файл также удален из песочницы Вашего приложения. Вам тогда дают новый ограниченный по объему безопасностью URL для доступа к новому файлу. Для получения дополнительной информации об использовании ограниченного по объему безопасностью URLs посмотрите Требования.

    Эта работа в основном комбинирует экспорт и операции открытия; однако, исходный файл также удален.