我正在创建播放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
调用了两次
给我建议我该如何解决这个问题?
由于
答案 0 :(得分:0)
我的建议是在NSNotificationCenter.defaultCenter().removeObserver(self, name: UIApplicationDidEnterBackgroundNotification, object: nil)
设置一个断点,并确保self
具有相同的内存地址(我认为它会有所不同)。通常,这意味着:
viewDidLoad()
时,您取消注册不存在的内容
观察者(但你应该有例外)。self
,然后由计时器保留。这一切都重演了。 P.S。通常,您希望调用dealloc
,以便您可以执行清理,或者根本不处理dealloc。