removeObserver 報錯 奔潰的問題


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM