Документация для PHAssetChangeRequest
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
//...
}
}
}