AVPlayer removeTimeObserver 崩溃应用程序(swift 3)

Posted

技术标签:

【中文标题】AVPlayer removeTimeObserver 崩溃应用程序(swift 3)【英文标题】:AVPlayer removeTimeObserver crashes app (swift 3) 【发布时间】:2016-10-25 14:49:49 【问题描述】:

我将全局变量时间观察者设置为:

self.timeObserver = self.avPlayer?.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.5, preferredTimescale: CMTimeScale(NSEC_PER_SEC)), queue: DispatchQueue.main)  [weak self] time in
      guard let weakSelf = self else 
          return
      
      // updating label with time

当视图关闭时,我调用:

if self.avPlayer != nil 
   self.avPlayer!.removeTimeObserver(self.timeObserver)

但这会使应用程序崩溃:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“您没有提供参考 到任何一个返回的对象 -addPeriodicTimeObserverForInterval:queue:usingBlock: 或 -addBoundaryTimeObserverForTimes:queue:usingBlock:'

请告诉我我做错了什么?谢谢你

【问题讨论】:

当你添加一个周期性时间观察者时,你能检查你的avPlayer 不为零吗? if self.avPlayer != nil self.avPlayer!.removeTimeObserver(self.timeObserver) 我正在检查,不,它不是 nil addPeriodicTimeObserver 的行是否只执行一次? 是的,就在我初始化avplayer的时候 看起来 self.timeObserver 在初始化后为空。因此,请验证此行至少运行一次,并且您确实收到了一个对象。 【参考方案1】:

你必须解开self.timeObserver

removeTimeObserver() 接受了Any 对象,但你传入了Any?,这会导致崩溃。

【讨论】:

以上是关于AVPlayer removeTimeObserver 崩溃应用程序(swift 3)的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer + 循环 + 背景

查找与 AVPlayerItem 关联的 AVPlayer

AVPlayer 问题,同时直播 (iOS)

如何为 AVPlayer 制作搜索栏

持续时间不是来自AVPlayer currentItem

使用 AVPlayer 进行 Airplay?