Уведомление не запускается при изменении контроллера представления в стеке навигации - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь отправить уведомление об изменении обновления стека навигации. Но это не срабатывает. Вот мой код У меня есть требование изменить контроллер вида root при нажатии кнопки. Я пробую приведенный ниже код, но он не работает для меня.

import UIKit


class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func replaceThirdViewControllerAsNavigationRoot() {
        let nc = NotificationCenter.default
        nc.post(name: Notification.Name("Notify"), object: nil)
        self.navigationController?.viewControllers = [ThirdViewController.instance()]
    }
}

class ThirdViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let nc = NotificationCenter.default
        nc.addObserver(self, selector: #selector(userLoggedIn), name: Notification.Name("Notify"), object: nil)
    }

    @objc func userLoggedIn() {
        print("-----")
    }
}

extension UIViewController {
    static func instance<T: UIViewController>() -> T {
        let name = String(describing: self)

        guard let controller = UIStoryboard.main.instantiateViewController(withIdentifier: name) as? T else {
            fatalError("ViewController '\(name)' is not of the expected class \(T.self).")
        }
        return controller

    }

}

extension UIStoryboard {
    static var main: UIStoryboard {
        return UIStoryboard.init(name: "Main", bundle: nil)
    }
}

Заранее спасибо.

1 Ответ

1 голос
/ 03 мая 2020

Неверная последовательность событий. Когда вы публикуете уведомление, вам необходимо убедиться, что наблюдатель уже существует, в противном случае уведомление будет отклонено.

Другими словами: убедитесь, что

nc.addObserver(self, selector: #selector(userLoggedIn), name: Notification.Name("Notify"), object: nil)

работает до

nc.post(name: Notification.Name("Notify"), object: nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...