Создание выдающегося пользовательского опыта

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

Жизненно важно, чтобы Ваше приложение управляло и смягчило все эти дополнительные источники сложности, предоставив Вашим пользователям лучший возможный опыт.

Предложите корректную работу в корректном контексте

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

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

Импорт и операции открытия являются частью обработки документов Вашего приложения и должны быть сгруппированы с подобными функциями. Экспорт и операции пересылки влияют на сам документ и должны быть присоединены к документу.

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

Оптимальный доступ к ранее используемому URLs

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

Можно использовать NSMetadataQuery возразите для поиска файлов, к которым получили доступ от Диска iCloud — это будет включать общедоступный контейнер iCloud и контейнер iCloud любого другого приложения. Для сбора этих данных используйте запрос NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope постоянный для объема.

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

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

NSMetadataQuery экземпляр может собрать информацию только о файлах, к которым получают доступ через Диск iCloud. Если пользователь получает доступ к файлу с помощью стороннего провайдера документа, необходимо сохранить безопасную закладку для того файла вместо этого. Когда средство выбора документа возвратит URL, проверьте URL’s NSURLIsUbiquitousItemKey ключ. Если URL не является повсеместный URL, сохраните закладку к файлу с помощью bookmarkDataWithOptions:includingResourceValuesForKeys:relativeToURL:error: метод и передающий в NSURLBookmarkCreationWithSecurityScope опция. Вызов этого метода создает закладку, содержащую ограниченный по объему безопасностью URL, который можно использовать для открытия файла без дальнейшего вмешательства пользователя.

Установите надлежащие ожидания

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

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

Кроме того, установите ожидания пользователя загрузки путем отображения размера файла от метаданных заполнителя. Существует два способа получить доступ к метаданным заполнителя. Во-первых, можно использовать NSURL экземпляр getPromisedItemResourceValue:forKey:error: метод.

Можно избежать этих условий состязания при помощи координатора файла. Используйте NSFileCoordinatorReadingImmediatelyAvailableMetadataOnly опция получить доступ к метаданным заполнителя, не загружая файл. Можно тогда получить доступ к метаданным по URL, переданному в блок средства доступа. Все еще необходимо использовать getPromisedItemResourceValue:forKey:error: получить доступ к метаданным, как бы то ни было.

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

Всегда используйте координатора файла

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

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

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

Наконец, скоординированные чтения и записи могут инициировать передачи файлов, которые могут занять произвольно долгое количество времени. Обязательно выполните эти чтения и записи на фоновом потоке или используйте асинхронное coordinateAccessWithIntents:queue:byAccessor:метод. Кроме того, обязательно дайте некоторую визуальную индикацию, что загрузка происходит, и дайте пользователю некоторый способ отменить эту загрузку.

Используйте предъявителя файла при отображении содержания документа

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

Когда любое из следующих условий происходит, предъявители файла уведомляют Вас:

Для получения дополнительной информации о провайдерах файла, посмотрите Роль Координаторов Файла и Предъявителей в Руководстве по программированию Файловой системы.