美文网首页
Terminating app due to uncaught

Terminating app due to uncaught

作者: Coder_Messi | 来源:发表于2018-12-13 14:56 被阅读12次

    这是挺早之前碰到的一个问题,记在Evernote没写出来,今天空了出来闲翻之前笔记时看到了就写到这里。

    播放相册视频崩溃

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An AVPlayerItem cannot be associated with more than one instance of AVPlayer'

    场景是这样:当前列表页展示相册里的照片和视频,tap列表里的某个视频进入下一级详情页,详情页面用AVPlayerItem创建一个AVPlayer对象,用AVPlayerViewControler播放相册视频,开始播放后点击返回上一级列表页,再点击这个视频进入详情页播放,闪退;假如我返回列表页换一个视频进入详情页播放,正常播放。AVPlayerItem对象是在列表页创建然后属性传进详情页,AVPlayer对象是在详情页创建的。崩溃信息就是上面的

    '*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An AVPlayerItem cannot be associated with more than one instance of AVPlayer'。

    看崩溃信息字面意思就是一个AVPlayerItem对象不能被放在不同的AVPlayer对象上播放。对应我的场景也确实是这样,一个AVPlayerItem对象被不同的AVPlayer对象持有了。问题来了,AVPlayerItem对象是在列表页创建的,在这个场景下始终没有被释放,AVPlayer对象是在详情页创建的,每次返回列表页AVPlayer对象都已经被释放了,却依然出现崩溃,猜测是AVPlayerItem对象依然被隐性持有着。这个问题在iOS 11.0以后的设备上没有复现(我测试了2台11.0以后的设备),在11.0之前的系统必现(测试了3台11.0之前的设备),所以苹果可能在11.0系统修复了这个bug。

    我搜了下这个bug,回复基本上都是套用这个提问的回答,大致都是MPMoviePlayerViewController的使用场景,我的问题是AVPlayerViewControler(iOS 8.0之后available)的使用场景。

    我解决这个问题的办法是把AVPlayer对象的创建也放在列表页,通过属性传进详情页,利用改变业务逻辑的方式替代。

    相关文章

      网友评论

          本文标题:Terminating app due to uncaught

          本文链接:https://www.haomeiwen.com/subject/ygtbhqtx.html