Как определить, доступен ли исходный фотоактив на устройстве? - PullRequest
0 голосов
/ 03 февраля 2019

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