Очистка наблюдателя NotificationCenter после представления модального сообщения - PullRequest
0 голосов
/ 24 декабря 2018

Мое приложение воспроизводит видео, и я хочу вызвать действие, когда видео заканчивается.Экран (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 голосов
/ 24 декабря 2018

addObserver возвращает объект наблюдателя.Вы игнорируете это и не сохраняете это.Поэтому он выходит за рамки и умирает, и наблюдение заканчивается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...