• 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     }
  • 相关阅读:
    118. Pascal's Triangle
    172. Factorial Trailing Zeroes
    345. Reverse Vowels of a String
    58. Length of Last Word
    383. Ransom Note
    387. First Unique Character in a String
    83. Remove Duplicates from Sorted List
    关于Assembly.CreateInstance()与Activator.CreateInstance()方法
    查看占用指定端口的进程
    如何使用eclipse打开已有工程
  • 原文地址:https://www.cnblogs.com/741162830qq/p/4959156.html
Copyright © 2020-2023  润新知