Получить изображение из проблемы PHAsset для обнаружения обновлений изображений

В настоящее время я управляю PHAsset с несколькими изображениями (из альбома, который создается моим приложением), я могу отображать его без каких-либо проблем. Для каждого изображения моего PHAsset я вычисляю хэш каждого изображения в моем приложении. Но если я изменяю изображение из своего приложения (например, через фотографии я меняю цвет изображения), я не могу обнаружить обновление, если я вычисляю хэш еще раз изображения PHAsset, пока мое приложение возобновлено, обновление не обнаружено, хэши остаются прежними ...

Вот код для получения изображения из PHAsset:

var img: UIImage?
    let manager = PHImageManager.default()
    let options = PHImageRequestOptions()
    options.version = .original
    options.isSynchronous = true
    manager.requestImageData(for: asset, options: options) { (data, _, _, _) in
        if let data = data{
            img = UIImage(data: data)
        }

    }
    return img

Я использую эту функцию при добавлении изображения (для вычисления хэша), и когда мне нужно проверить хэш изображений PHasset, я получаю PHAssetCollection, используя

        let collection = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)

но никаких изменений не обнаружено ... может быть, мне нужно попросить обновить PHAssetCollection, чтобы получить изменения на изображениях? Я что-то упускаю ?

Чтобы быть ясным, я вычисляю хэш изображения следующим образом:

//function described just above
let img = getSavedImageFromPHAsset(asset: myAsset)!
let img_hash = img.sha256()
//I'm comparing the hashes with this value

func sha256(data: Data) -> Data {
    var digestData = Data(count: Int(CC_SHA256_DIGEST_LENGTH))

    _ = digestData.withUnsafeMutableBytes {digestBytes in
        data.withUnsafeBytes {messageBytes in
            CC_SHA256(messageBytes, CC_LONG(data.count), digestBytes)
        }
    }
    return digestData
}

Я предположил, что как только изображение, связанное с PHAsset, было изменено, я смогу обнаружить его модификацию (я вижу, что изображение обновлено на экране моего приложения, но вычисленный хэш остается прежним)


person tiamat    schedule 18.12.2019    source источник


Ответы (1)


Попробуйте следующее:

options.version = .current

вместо того

options.version = .original

Ваш код всегда будет возвращать исходное неотредактированное фото / видео. .current возвращает ту же фотографию, которую вы видите в приложении iOS Photos.

person holtmann    schedule 22.12.2019