今天犯了一個錯誤,一般我都是在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 }