Как определить, доступен ли исходный фотоактив на устройстве?

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

0 ответов

Другие вопросы по тегам