今天犯了一个错误,一般我都是在viewDidDisappear 中移除各种监听。今天在调试播放器的时候,直接点击返回home界面正常,但是如果点击进入下一个控制器,由控制器再返回到播放器的控制器的时候,监听报错,应用奔溃。
原来是直接由NAC引导切换到播放器的控制器,点击返回之后执行viewDidDisappear---》deinit 方法。
如果是直接从播放控制器跳转到下一个控制器,只执行viewDidDisappear 方法,而我在viewDidDisappear 已经将各种监听移除。 再一次调回到播放控制器的手,移除就会出错。所以修改如下:将remove 在deinit中执行。
直接返回
1 override func viewDidDisappear(animated: Bool) { 2 super.viewDidDisappear(animated) 3 4 } 5 6 deinit{ 7 8 UIApplication.trackEvent(TrackEvent.TIMING_VIDEO, action: TrackEvent.VIDEO_PLAYBACK_BUFFER_COUNT, label: String(bufferCount)) 9 if self.syncTimer != nil { 10 self.syncTimer.invalidate() 11 } 12 13 self.cleanUpPlayerPeriodicTimeObserver() 14 NSNotificationCenter.defaultCenter().removeObserver(self) 15 if AVPictureInPictureController.isPictureInPictureSupported() { 16 17 removeObserver(self, forKeyPath: "pictureInPictureController.pictureInPicturePossible", context: &playerViewControllerKVOContext) 18 } 19 self.playerItem!.removeObserver(self, forKeyPath: "status") 20 if isPlaying() { 21 self.pause() 22 } else { 23 needResume = true 24 } 25 self.VIDEO.playerLayer.removeAllAnimations() 26 self.VIDEO.playerLayer.removeAnimationForKey("animationGroup") 27 28 }