草庐IT

ios - UIApplicationDidEnterBackgroundNotification 多次调用 swift 2.0

coder 2023-09-11 原文

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

在这个应用程序中,

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

我正在使用 UIApplicationDidEnterBackgroundNotification播放背景视频我没有删除UIApplicationDidEnterBackgroundNotificationviewDidDisappear因为我想播放整个应用程序的视频声音

这是代码

 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调用了两次

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

谢谢

最佳答案

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

  1. 当您输入 viewDidLoad() 时,您注销了一个不存在的 观察者(但你应该有异常(exception))。
  2. 您注册self,然后由计时器保留。这一切都会重复。

附言通常,您似乎希望调用 dealloc 以便执行清理或者根本不处理 dealloc。

关于ios - UIApplicationDidEnterBackgroundNotification 多次调用 swift 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33887968/

有关ios - UIApplicationDidEnterBackgroundNotification 多次调用 swift 2.0的更多相关文章

随机推荐