Ошибка библиотеки фотографий iOS 8 при добавлении актива с использованием PHAssetChangeRequest

Я получаю сообщение об ошибке «Операция не разрешена» при попытке создать фоторесурс с помощью [PHAssetChangeRequest creationReqeustForAssetFromImageAtFileURL:]. Я пытаюсь скопировать другую фотографию из библиотеки фотографий, сначала получив путь к первой фотографии.

Функция работает, как и ожидалось, при работе на эмуляторе, но не работает, когда я запускаю ее на реальном устройстве. Эмулятор и устройство работают под управлением iOS 8.3. iPad настроен для хранения фотографий в iCloud, а эмулятор — нет.

Мой фрагмент кода

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
          PHAssetChangeRequest *assetChangeRequest = 
                   [PHAssetChangeReques creationRequestForAssetFromImageAtFileURL:currentImagePath];
    } completionHandler:^(BOOL success, NSError *error) {
       if (!success) {
           NSLog(@"Error creating asset: %@", error);
       }

currentImagePath происходит от [PHImageManager requesstImageDataForAsset:], что дает актив фотографии, которую я пытаюсь скопировать. Путь выглядит так при запуске на реальном iPad:

     file:///var/mobile/Media/DCIM/101IMPRT/IMG_1258.JPG

Это выглядит так, когда я запускаю его в эмуляторе:

     file:///Users/<my-name>/Library/Developer/CoreSimulator/Devices/<long UUID-type code>/data/Media/PhotoData/Mutations/DCIM/100APPLE/IMG_0002/Adjustments/FullSizeRender.jpg

Получение ошибки при запросе на создание:

сообщение об ошибке

Невозможно создать данные из файла Error Domain=NSCocoaErrorDomain Code=257 "Операция не может быть завершена. (Ошибка Cocoa 257.)" UserInfo=0x17046ac40 {NSFilePath=/var/mobile/Media/DCIM/100APPLE/IMG_0042.JPG, NSUunderlyingError=0x1702480a0 "Операция не может быть завершена. Операция не разрешена"}

Интересно, что запрос на создание выполняется успешно на всех платформах, если я использую UIImage* с функцией [PHAssetChangeRequest creationReqeustForAssetFromImage:].

Буду признателен, если кто-нибудь объяснит, что происходит. Это связано с хранением фотографий в облаке? Я пытался отключить iCloud для фотографий на iPad, но все равно получаю то же самое.


person lp1756    schedule 30.04.2015    source источник


Ответы (1)


Для справки: если вы используете облако, вам может понадобиться использовать networkAccessAllowed: Bool: Это проверит, сможете ли вы загрузить изображение из облака, если это необходимо.

Я не уверен точно в контексте вашей проблемы, потому что этот пост немного неясен. Вы проверили словарь resultHandler на наличие ошибок в вызове функции?

func requestImageForAsset(_ asset: PHAsset!,
               targetSize targetSize: CGSize,
              contentMode contentMode: PHImageContentMode,
                  options options: PHImageRequestOptions!,
            resultHandler resultHandler: ((UIImage!,
                [NSObject : AnyObject]!) -> Void)!) -> PHImageRequestID

Перед редактированием актива используйте его метод canPerformEditOperation, чтобы узнать, разрешает ли ресурс редактирование.

«Чтобы отредактировать изображение или видеоконтент актива, сначала начните сеанс редактирования контента с помощью метода requestContentEditingInputWithOptions:completionHandler: актива. Вы фиксируете редактирование контента, устанавливая свойство contentEditingOutput запроса на изменение в блоке изменения. Для получения дополнительной информации о редактировании контента актива см. PHAsset Ссылка на класс."

person James Combs    schedule 20.05.2015
comment
Спасибо за ответ. Я проверил доступ к сети разрешен. И обработчик результата не дал ошибки. И проверил canPerformEditOperation. Я не показывал весь свой код, пытаясь прояснить вопрос; думаю не получилось???? - person lp1756; 21.05.2015
comment
нет проблем. Есть ли причина, по которой вы хотите использовать URL-адрес вместо изображения с createRequestForAssetFromImage (YourImageHere). Я считаю, что это сохранит изображение в фотоальбом, а не скопирует его. Что именно вы подразумеваете под копированием другой фотографии из фотобиблиотеки? - person James Combs; 21.05.2015
comment
Я пытался установить метаданные IPTC и не хотел терять существующие метаданные EXIF ​​и IPTC. Насколько я понимаю, у изображения нет метаданных. - person lp1756; 22.05.2015