Как определить, доступен ли исходный фотоактив на устройстве?
Документация для PHAssetChangeRequest
"srevertAssetContentToOriginal()
имеет следующее важное примечание:
Этот запрос не выполняется, если исходное содержимое для ресурса недоступно на текущем устройстве (например, если включена библиотека фотографий 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
//...
}
}
}