添加&删除NSNotificationCenter Observer - UIApplicationDidEnterBackgroundNotification - 正确的方法吗?

时间:2016-04-30 08:43:49

标签: ios swift background-process nsnotificationcenter observers

我有一个播放音频的UIView,有一个NSTimer和进度圆棒动画。

为了简单起见,如果用户切换应用或接听电话,我希望所有进程都停止并自行重置。

我建议使用:

  1. 调用观察者 - 可能在viewWillAppear

     override func viewWillAppear(animated: Bool) {
    
    // set observer for WillEnterForeground
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(WorkoutFullFace1Exercise7TVC.willEnterBackground), name: UIApplicationDidEnterBackgroundNotification, object: nil)
    
    
    ...}
    
    1. 停止相关任务:

      // Stop all audio, timer and animation if app enters background.
      func willEnterBackground() {
      
      myAudioPlayer.stop()
      myAudioPlayer.currentTime = 0
      
      swiftTimer.invalidate()
      swiftCounter = 60
      timerLabel.text = String(swiftCounter)
      
      
      pauseBtn.alpha = 1.0
      
      playBtn.alpha = 1.0
      
      stopBtn.alpha = 1.0
      
      currentCount = 0
      circularProgressView.animateFromAngle(circularProgressView.angle, toAngle: 0, duration: 0.5, completion: nil)
      }
      
    2. 解雇观察员:

      override func viewWillDisappear(animated: Bool) {
      
        NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidEnterBackgroundNotification, object: nil)
      
      .... }
      
    3. 加载和解散观察者的正确位置在哪里?我已阅读说明使用viewDidLoad / deinitviewWillAppear / Disappear等的线程。

      任何人都可以详细说明我的方案推荐的内容,以及当前和可能保留的可用内容。在未来(语言和实践似乎在编程世界中迅速变化)。

      我使用上面的正确语法吗?

      谢谢!

1 个答案:

答案 0 :(得分:1)

对我来说,一切似乎都是正确的

  

确保在每种方法中调用super实现。这样可以   当你稍后继承子事时会导致一些问题

 override func viewWillAppear(animated: Bool) {
      super.viewWillAppear(animated);
      // other code
...}

 // same for viewWillDisappear