PHAsset возвращает нулевое значение для UIImage при использовании PHImageManager

Любая идея, почему это вернет ноль для «thisImage» после добавления в настройки requestImageOption? Если для параметров установлено значение nil, thisAsset возвращает значение, но это изображение с низким разрешением, определенно не с исходным высоким разрешением. Я пытаюсь вернуть исходное изображение из PHAsset (thisAsset)

    if let thisAsset:PHAsset = info[UIImagePickerController.InfoKey.phAsset] as? PHAsset {
          arrImageIdentifiers.append(thisAsset.localIdentifier)

        let manager = PHImageManager.default()
        let requestImageOption = PHImageRequestOptions()
        requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat

        manager.requestImage(for: thisAsset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.default, options: requestImageOption, resultHandler: {(thisImage, _) in

            Object.tempImage = thisImage

            print("Picture metadata: \(thisAsset)")
            let creationDate = thisAsset.creationDate

            PhotoMeta.createDate = creationDate

            })
            //Get a reference to the camera view controller and call the savePhoto method
            let cameraVC = self.selectedViewController as? CameraViewController

            if let cameraVC = cameraVC {
                cameraVC.savePhoto(image: Object.tempImage!)
            }
    }

person akash23a    schedule 18.10.2019    source источник
comment
Попробуйте еще раз с requestImageOption.isSynchronous = true   -  person Ankit Jayaswal    schedule 18.10.2019
comment
@AnkitJayaswal, можешь ли ты ответить на этот вопрос? Это сработало, спасибо   -  person akash23a    schedule 18.10.2019
comment
Может показаться, что это работает, но это неправильно.   -  person matt    schedule 19.10.2019


Ответы (1)


Установите requestOptions isSynchronus на true, чтобы решить вашу проблему:

    let requestImageOption = PHImageRequestOptions()
    requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat
    requestImageOption.isSynchronous = true

    manager.requestImage(for: thisAsset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.default, options: requestImageOption, resultHandler: {(thisImage, _) in

        //....
    }
person Ankit Jayaswal    schedule 19.10.2019
comment
Это неверно. Вы не должны устанавливать это синхронно в основном потоке. - person matt; 19.10.2019