PHAssetChangeRequest
's revertAssetContentToOriginal()
的文档具有以下重要说明:
如果资产的原始内容不可用,则此请求失败 在当前设备上(例如,如果启用了iCloud照片库 并且用户已在其他设备上编辑了资产)。采用 PHAssetResourceManager以确保原始资产内容是 发出此请求之前,请先下载到当前设备。
我可以通过在iPad上编辑照片并尝试在iPhone上还原照片来轻松重现所描述的故障。
我的问题是,如何确定原始资产内容是否已下载到当前设备?
我认为我可以请求资产的原始资源,如果资源可用,它将立即调用完成模块,但是我发现情况并非如此。当我拍摄新照片时,对其进行编辑,然后再在同一设备上将其还原,则需要互联网连接才能下载原始内容-不会立即调用完成框。但是我知道原始内容是可用的,因为如果我在不首先请求原始内容的情况下调用revertAssetContentToOriginal()
,它将成功。
let resource = PHAssetResource.assetResources(for: asset).first(where: { $0.type == .photo })
let options = PHAssetResourceRequestOptions()
options.isNetworkAccessAllowed = true
PHAssetResourceManager.default().requestData(for: resource, options: options, dataReceivedHandler: { data in
//nothing to see here
}) { error in
if let error = error {
//...
} else {
PHPhotoLibrary.shared().performChanges({
let request = PHAssetChangeRequest(for: asset)
request.revertAssetContentToOriginal()
}) { (success, error) in
//...
}
}
}