У меня проблема с AVPlayer. Я пробовал много решений, но он по-прежнему падает после того, как я перехожу к другому виду.AVPlayer вылетает на устройство при отклонении вида
class GuideVideo : BaseViewController{
var avPlayer: AVPlayer?
var avPlayerLayer: AVPlayerLayer?
override func viewDidLoad() {
super.viewDidLoad()
generateVideo()
}
func generateVideo() {
let videoURLWithPath = data["VideoUrl"]
let videoFilePath = NSURL(string: videoURLWithPath!)
let avAsset: AVAsset = AVAsset.assetWithURL(videoFilePath) as! AVAsset
let avPlayerItem = AVPlayerItem(asset: avAsset)
avPlayer = AVPlayer(playerItem: avPlayerItem)
avPlayerLayer = AVPlayerLayer(player: avPlayer)
avPlayerLayer!.frame = self.videoView.bounds
self.videoView.layer.addSublayer(avPlayerLayer)
avPlayer!.play()
}
Я также попытался удалить наблюдатель от него, так как я предполагаю, что авария связана с нулевым наблюдателем.
override func viewWillDisappear(animated: Bool) {
dispatch_async(dispatch_get_main_queue(),{
if self.avPlayerLayer != nil {
self.avPlayerLayer!.player.pause()
NSNotificationCenter.defaultCenter().removeObserver(self.avPlayerLayer!)
self.avPlayerLayer!.removeFromSuperlayer()
self.avPlayerLayer = nil
}
self.avPlayer!.pause()
self.avPlayer = AVPlayer()
})
super.viewWillDisappear(animated)
}
Ничего не работает, и авария не дает данных. Либо он выходит из строя без указания линии или общий
Тема 1: EXC_BAD_ACCESS * Импорт вещь, чтобы отметить, что эта авария происходит только на iPhone 6/6 +. Наш iPhone 5C отлично справляется с классом. * Я получаю сообщение об ошибке после перехода на другой контроллер просмотра или другой навигационный стек, но через несколько секунд после отклонения представления.
Спасибо, сидели на этом в течение большей части 2 дней.
EDIT: Проблема, по-видимому, связана с SWReveal. Он освобождает экземпляры до завершения жизненного цикла. Принято наилучшее решение, но проблема связана с SWReveal.
'viewWillDisappear' уже названный в главном потоке. Итак, в чем цель 'dispatch_async (dispatch_get_main_queue()'? – matt
Если вы не можете определить линию сбоя любым другим способом, возможно, вы можете пересечь свой код с большим количеством протоколирования ('println'), чтобы вы могли определить, что является последней строкой который выполняется до сбоя. – matt
Когда я использовал точки останова, чтобы увидеть, где приложение разбилось, оно перестало сбой, поэтому я хотел проверить, связано ли это с потоком. – user3307029