呈现模式后,NotificationCenter观察者清除

时间:2018-12-24 17:06:18

标签: ios swift notificationcenter

我的应用正在播放视频,我想在视频结束时触发操作。屏幕(A)嵌入在导航控制器中,如果我触发了(向B)推,然后又返回(向A),则动作(在A中)仍然基于观察者而发生。我的屏幕上还有一个选项可以触发模式(至C),然后将其解散以返回(至A)。但是,当我从模态(C)返回时,观察者(在A中)不见了。

这是屏幕A的视图控制器的代码:

ScreenAViewController: UIViewController {
    override func viewDidLoad() {

        super.viewDidLoad()
        // Do more stuff

        NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.avPlayer.currentItem, queue: .main) { _ in
            // Do stuff
        }
    }
}

以下是触发屏幕C模式的代码:

@IBAction func triggerModal(_ sender: UIButton) {
    avPlayer.pause()
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let screenCViewController = storyboard.instantiateViewController(withIdentifier: "ScreenC") as! ScreenCViewController
    present(screenCViewController, animated: true)
}

最后这是关闭屏幕C的行:

dismiss(animated: true, completion: nil)

1 个答案:

答案 0 :(得分:0)

addObserver返回一个观察者对象。您正在忽略它,而没有保留它。因此,它超出范围并死亡,观察结束。