Книга: iOS. Приемы программирования
Обсуждение
Обсуждение
Фреймворк Assets Library — удобный посредник между разработчиком и библиотекой фотографий. Как будет указано в разделе 13.6, в iOS SDK вам предоставляются встроенные компоненты графического пользовательского интерфейса, которыми можно пользоваться для доступа к содержимому библиотеки фотографий. Тем не менее иногда может потребоваться и непосредственный доступ к этому содержимому. В таких случаях следует пользоваться фреймворком библиотеки ресурсов (Assets Library).
Выделив и инициализировав объект Assets Library типа ALAssetsLibrary, можно пользоваться методом экземпляра writeVideoAtPathToSavedPhotosAlbum: completionBlock:, относящимся к данному объекту, для записи видео с URL в библиотеку фотографий. Все, что от вас требуется, — предоставить URL видеоролика в форме NSURL, а также блоковый объект, чей код будет вызываться после сохранения видео. Этот блоковый объект должен принимать два параметра типов NSURL и NSError.
Если параметр error имеет значение nil, процесс сохранения прошел нормально и поводов для беспокойства нет. Одна из типичных ошибок, которую iOS может вам вернуть в такой ситуации, примерно такова:
Error Domain=ALAssetsLibraryErrorDomain Code=-3302 «Invalid data»
UserInfo=0x79 23590 {NSLocalizedFailureReason=
There was a problem writing this asset because
the data is invalid and cannot be viewed or played.,
NSLocalizedRecoverySuggestion=Try with different data,
NSLocalizedDescription=Invalid data}
Такое сообщение об ошибке вы можете получить и в случае, если попытаетесь передать URL (уникальный идентификатор ресурса), не относящийся к пакету вашего приложения.
Первый параметр, передаваемый блоковому объекту, который, в свою очередь, предоставляется методу writeVideoAtPathToSavedPhotosAlbum: completionBlock:, будет указывать URL видео, сохраненного в библиотеке ресурсов. URL такого рода может иметь следующий вид:
assets-library://asset/asset.MOV?id=F9B5F733-487C-
4418-8C8D-46ABC9FEE23B&ext=MOV
Если ваша программа впервые пытается обратиться к библиотеке фотографий на пользовательском устройстве, то iOS спросит у пользователя, разрешена такая операция или нет. Если пользователь даст разрешение, то вызов метода writeVideoAtPathToSavedPhotosAlbum: completionBlock: будет успешным. Если же разрешение получено не будет, то объект ошибки внутри блока завершения будет валидным объектом ошибки, который вы можете проверить и над которым можете выполнять действия. Если ранее пользователь не разрешил вашему приложению доступ к библиотеке фотографий, то вы не сможете изменить это решение программно. Лишь когда сам пользователь решит предоставить вам доступ к библиотеке фотографий, он изменит соответствующие настройки в разделах Settings (Настройки) и Privacy (Конфиденциальность).
В разделе 13.7 будет рассказано, как использовать такой URL при загрузке в память данных для видеофайла.