После выбора видео из библиотеки фотографий я получил NSURL видео с info[UIImagePickerControllerReferenceURL]
.
if let selectedVideo = info[UIImagePickerControllerReferenceURL] as? NSURL, let videoURLString = selectedVideo.absoluteString {
print(videoURLString) // print unwrapped url as string
videoView.configure(url: videoURLString)
videoView.isLoop = true
videoView.play()
} else {
print("Error in unwrapping selected video as a local file URL!")
}
Я правильно развернул его и настроил свой UIView для воспроизведения после прохождения строки. Вот функция настройки videoView.
func configure(url: String) {
if let videoURL = URL(string: url) {
player = AVPlayer(url: videoURL)
playerLayer = AVPlayerLayer(player: player)
playerLayer?.frame = bounds
playerLayer?.videoGravity = AVLayerVideoGravity.resize
if let playerLayer = self.playerLayer {
layer.addSublayer(playerLayer)
}
NotificationCenter.default.addObserver(self, selector: #selector(reachTheEndOfTheVideo(_:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.player?.currentItem)
}
}
Это отлично работало в симуляторе на iPhone 8 Plus, но после запуска на моем собственном iPhone 8 Plus, UIView, который будет воспроизводить видео, не загружался, и при этом я не получал сообщение об ошибке. Позже я понял, что UIImagePickerControllerReferenceURL
устарело с iOS 11.0, хотя в документации указано, что он должен поддерживать iOS 4.1+.
Я использовал UIImagePickerControllerMediaURL
вместо , затем , наконец, он работал на моем телефоне, а также на симуляторе.
Я тоже не получал сообщение об ошибке, и print(videoURLString)
правильно печатал URL ресурса. Чтобы найти это потребовалось довольно много времени. Как я могу лучше защитить приложение от подобных ошибок при устранении неполадок? Если я не могу использовать необязательную привязку, как еще можно напечатать ошибку для ошибок такого рода?