Ios 关闭视图时设备上的AVPlayer崩溃

Ios 关闭视图时设备上的AVPlayer崩溃,ios,avplayer,iphone-6,swrevealviewcontroller,Ios,Avplayer,Iphone 6,Swrevealviewcontroller,我和AVPlayer有点问题。我尝试了很多解决方案,但在我换了一个不同的视角后,它仍然崩溃 class GuideVideo : BaseViewController{ var avPlayer: AVPlayer? var avPlayerLayer: AVPlayerLayer? override func viewDidLoad() { super.viewDidLoad() generateVideo() } func generateVideo () {

我和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\u错误访问 *需要注意的是,这种崩溃只发生在iPhone 6/6+上。我们的iphone5c在课堂上表现出色。 *我只是在移动到另一个视图控制器或不同的导航堆栈后,但在视图被取消几秒钟后,才发生崩溃

谢谢你,我已经坐了两天了

编辑:该问题显然与SWF有关。它在实例的生命周期结束之前释放实例。 接受了最佳解决方案,但问题与SWREVEL有关

  • 尝试使用MPMoviePlayerController而不是AVPlayer,对于简单的解决方案,MPMoviePlayerController有一个更简单的API
  • 将MPMoviePlayerController设置为全局实例,使其可通过整个应用程序访问,然后在需要时初始化
  • 尝试先在本地播放视频,然后检查是否解决了问题

  • 视图将消失
    已在主线程上调用。那么
    dispatch\u async(dispatch\u get\u main\u queue()
    )的目的是什么呢?如果您不能以任何其他方式确定崩溃线,也许您可以在代码中插入大量日志(
    println
    )因此,您可以确定崩溃发生前执行的最后一行是什么。当我使用断点查看应用程序崩溃的位置时,它停止崩溃,因此我想检查它是否与线程相关。查看您的断点导航器。您是否有异常断点?没有。我还尝试检查它崩溃的确切位置它在视图消失后崩溃。这就是我添加removeObserver的原因。