PHAsset URL возвращает ноль изображения

Проблема: загрузка UIImage с URL-адресом, полученным из PHAsset, возвращает nil.

Контекст: у меня есть компонент пользовательского интерфейса, который работает с URL-адресами изображений и заполняется в разных частях приложения разными провайдерами. В конкретном случае я получаю PHAsset.

Код для запроса URL-адреса PHAsset:

        let inputRequestOptions = PHContentEditingInputRequestOptions()
        inputRequestOptions.isNetworkAccessAllowed = true

        asset.requestContentEditingInput(with: inputRequestOptions, completionHandler: { (edittingInput, _) in
            guard let url = edittingInput?.fullSizeImageURL else {
                return
            }

            switch asset.mediaType {
            case .image: editMediaContentContainerPresenter.assets = [.image(url)]
            case .video: editMediaContentContainerPresenter.assets = [.movie(url)]
            default:
                debugPrint("unsupported asset")
            }
        })

Код для загрузки URL в UIImage внутри моего компонента UI:

func image(for url: URL, maximumPixelSize: CGFloat) -> UIImage? {
    let options = [kCGImageSourceCreateThumbnailWithTransform: true,
                   kCGImageSourceCreateThumbnailFromImageAlways: true,
                   kCGImageSourceThumbnailMaxPixelSize: maximumPixelSize] as CFDictionary

    guard let source = CGImageSourceCreateWithURL(url as CFURL, nil) else {
        return nil
    }

    guard let imageReference = CGImageSourceCreateThumbnailAtIndex(source, 0, options) else {
        return nil
    }

    return UIImage(cgImage: imageReference, scale: UIScreen.main.scale, orientation: .up)
}

Особые соображения: мне нужно преобразовать PHAsset в URL, потому что текущий компонент пользовательского интерфейса работает со многими другими поставщиками и частями приложения, и все они преобразуются в URL. Иногда загрузка с этого URL работает, но обычно максимально один раз. Чаще всего не удается загрузить UIImage с предоставленного URL.

Вопрос: Как я могу получить действительный URL.

Решения уже приняты во внимание, но следует избегать:

  1. загрузка изображения с запросами phasset, а затем сохранение его отдельно на локальный URL
  2. передавая UIImage вместо URL

0 ответов

Другие вопросы по тегам