UIApplicationDidEnterBackgroundNotification称为多次swift 2.0

时间:2015-11-24 07:44:39

标签: ios swift swift2 ios9

我正在创建播放youtube视频的应用。

在这个应用程序中,

用户可以播放youtube视频,当用户进入后台或锁定手机时,视频会播放

我使用UIApplicationDidEnterBackgroundNotification播放背景视频,我不会删除UIApplicationDidEnterBackgroundNotification中的viewDidDisappear,因为我想播放视频声音整个应用

这是代码

 override func viewDidLoad() {
    super.viewDidLoad()
      NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidEnterBackgroundNotification, object: nil)

      NSNotificationCenter.defaultCenter().addObserver(self, selector: "playBgVideo", name: UIApplicationDidEnterBackgroundNotification, object: nil)
 } 

 func playBgVideo()
 {
   bgTimer =  NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "hello", userInfo: nil, repeats: true)
   NSNotificationCenter.defaultCenter().addObserver(self, selector: "playFgVideo", name: UIApplicationWillEnterForegroundNotification, object: nil)
 }

 func hello()
 {
  player?.play()
 }

 func playFgVideo()
{
 bgTimer?.invalidate()
 NSNotificationCenter.defaultCenter().removeObserver(self, name:UIApplicationWillEnterForegroundNotification, object: nil)


}

当我第一次播放视频时,由于UIApplicationDidEnterBackgroundNotification调用了一次,后台播放效果很好,但我播放第二个视频,然后后台播放不起作用,因为UIApplicationDidEnterBackgroundNotification调用了两次

给我建议我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:0)

我的建议是在NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidEnterBackgroundNotification, object: nil)设置一个断点,并确保self具有相同的内存地址(我认为它会有所不同)。通常,这意味着:

  1. 当您输入viewDidLoad()时,您取消注册不存在的内容 观察者(但你应该有例外)。
  2. 您注册self,然后由计时器保留。这一切都重演了。
  3. P.S。通常,您希望调用dealloc,以便您可以执行清理,或者根本不处理dealloc。