В настоящее время я управляю 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, было изменено, я смогу обнаружить его модификацию (я вижу, что изображение обновлено на экране моего приложения, но вычисленный хэш остается прежним)