Как исправить проблему с пустыми активами с помощью PHImageManager в AssetsPickerController iOS?

Я работаю над AssetsPickerController в Swift, чтобы выбрать несколько Videos из Device gallery.

Проблема: когда я выбираю несколько Videos или иногда один video, иногда мой App дает сбой из-за Пустого Video Asset. Это происходит 5-10 раз, из 100 раз тестирования.

Код:

@IBAction func openAssetsAction(_ sender: UIButton) {
        let rootListAssets = AssetsPickerController()
        rootListAssets.didSelectAssets = {(assets: Array<PHAsset?>) -> () in

            for i in 0..<assets.count {

                let myPHAsset = assets[i]

                let options = PHVideoRequestOptions()
                options.deliveryMode = .highQualityFormat
                options.isNetworkAccessAllowed = true

                options.progressHandler = {  (progress, error, stop, info) in
                    print("progress: \(progress)")
                }

                PHImageManager.default().requestAVAsset(forVideo: myPHAsset!, options: options, resultHandler: { (asset, audioMix, info) in
                    if let urlAsset = asset as? AVURLAsset {
                        let localVideoUrl = urlAsset.url
                        print(localVideoUrl)
                    }
                })
            }
        }

        let navigationController = UINavigationController(rootViewController: rootListAssets)
        present(navigationController, animated: true, completion: nil)
    }

Я изо всех сил старался найти аналогичную проблему в StackOverFlow и получил некоторые, они предлагают использовать isNetworkAccessAllowed, но после установки isNetworkAccessAllowed я все равно получаю nil Asset.


person user2786    schedule 03.04.2019    source источник
comment
Если что-то не так в моем вопросе, я готов услышать ваши предложения. Зачем минусовать?   -  person user2786    schedule 03.04.2019
comment
Что произойдет, если вы удалите `options.deliveryMode = .highQualityFormat`?   -  person ahbou    schedule 03.04.2019
comment
после удаления также проблема остается такой же.   -  person user2786    schedule 03.04.2019
comment
В изображении у нас есть синхронное свойство, но оно недоступно для видео. Я борюсь с этим с последних 2 дней. Пожалуйста, предложите мне @ahbou   -  person user2786    schedule 03.04.2019
comment
@ user2786 вы сталкиваетесь с такой ошибкой _ArrayBuffer._getElementSlowPath(_:)?   -  person chirag shah    schedule 03.04.2019
comment
@chiragshah Я не получаю никаких ошибок, всего я получаю правильное количество ресурсов с помощью метода didSelectAssets, но когда я конвертирую PHAssets в URL-адреса, для некоторых видео я получаю ноль. Ты понимаешь?   -  person user2786    schedule 03.04.2019
comment
@user2786 user2786 Хорошо, понял.   -  person chirag shah    schedule 03.04.2019
comment
Вы сталкивались с этой проблемой? Пожалуйста, дайте любую идею.   -  person user2786    schedule 03.04.2019
comment
@ user2786, вы нашли какое-нибудь решение для того же??   -  person Zღk    schedule 05.06.2019


Ответы (1)


Во-первых, вы не должны принудительно разворачивать актив здесь forVideo: myPHAsset!

guard 
  let myPHAsset = assets[i] 
else { 
  return 
}

Затем попробуйте установить для deliveryMode автоматический режим:

options.deliveryMode = .automatic

РЕДАКТИРОВАТЬ:

Для принудительной загрузки ассета нам нужно указать версию:

options.version = .original
person ahbou    schedule 03.04.2019
comment
Спасибо за ваш ответ, но меня беспокоит, почему актив дает ноль. Это решение в основном предназначено для того, чтобы избежать проблемы сбоя, но любое другое решение требует получения URL-адресов для всех выбранных видео. - person user2786; 03.04.2019
comment
@ user2786 nil означает, что ресурса нет в библиотеке. Принудительно загрузите, установив его на оригинал - person ahbou; 03.04.2019
comment
Но для одного и того же видео иногда я тоже получаю, а иногда нет :( - person user2786; 03.04.2019
comment
Как я уверен, вы видели из множества вопросов по SO, Photos.framework не надежен на 100%:/ То, как он обрабатывает кэширование, до сих пор остается загадкой... - person ahbou; 03.04.2019