PHImageManager throws Первая стадия оппортунистического запроса изображения вернула изображение не в табличном формате, это не фатально, но неожиданно

Я использую PHImageCachingManager для получения изображений для PHAsset. Мне нужно использовать режим opportunistic, чтобы сначала загружалось доступное изображение с низким разрешением, а затем, когда становится доступным полное разрешение, оно загружалось.

По какой-то причине я продолжаю получать следующее предупреждение, и мое изображение с низким разрешением не загружается. Изображение загружается только при получении самого высокого разрешения (из iCloud).

Предупреждение:

"First stage of an opportunistic image request returned a non-table format image, this is not fatal, but it is unexpected."

Что я делаю не так?

    let imageRequestOptions = PHImageRequestOptions()
    imageRequestOptions.isNetworkAccessAllowed = true
    imageRequestOptions.deliveryMode = .opportunistic
    let imageCachingManager = PHCachingImageManager()

    imageCachingManager.requestImage(for: asset , targetSize: PHImageManagerMaximumSize, contentMode: .aspectFill, options: imageRequestOptions) { (image, infoDict) in
        DispatchQueue.main.async {
            if self.myImageView.identifierTag == asset.localIdentifier {
                self.myImageView.image = image
            }
        }
    }

person sudoExclaimationExclaimation    schedule 18.03.2019    source источник


Ответы (1)


imageCachingManager.requestImage(for: asset , targetSize: PHImageManagerMaximumSize, contentMode: .aspectFill, options: imageRequestOptions) { (image, infoDict) in
    DispatchQueue.main.async {
        if self.myImageView.identifierTag == asset.localIdentifier {
            self.myImageView.image = image
        }
    }
}

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

targetSize: PHImageManagerMaximumSize

to

targetSize: CGSize(width: asset.pixelWidth, height: asset.pixelHeight)

или укажите размер изображения, например CGSize (с: 150, высота: 150), если вы не хотите взорвать свое устройство из-за нехватки памяти.

person El Tomato    schedule 18.03.2019
comment
В чем разница между использованием метода asset.pixelWidth и PHImageManagerMaximumSize? Кроме того, не будет ли это просто ошибкой, если использование PHImageManagerMaximumSize не допускает оппортунистического просмотра? Я посмотрел на используемую память, и это не так уж плохо. - person sudoExclaimationExclaimation; 19.03.2019
comment
Вы хотите сказать, что все еще видите предупреждение с targetSize: CGSize(width: asset.pixelWidth, height: asset.pixelHeight)? - person El Tomato; 19.03.2019
comment
Нет, я не вижу предупреждения, если использую это. Но мне любопытно, не означает ли это, что PHImageManagerMaximumSize бесполезен для .opportunistic? Ака ошибка? - person sudoExclaimationExclaimation; 19.03.2019
comment
Я не знаю точной разницы. Если вы сравните PHImageManagerMaximumSize и assets.size, последний всегда меньше при фиксированной ширине. - person El Tomato; 19.03.2019