NSNotification addObserver在两个ViewControllers Swift中

时间:2016-05-20 13:09:26

标签: swift nsnotifications

在我的HomeViewController viewDidLoad方法中,我有一个观察者,寻找新的通知。观察时它会转移到SecondTableVC。我在第二个VC中有一个观察者寻找相同的通知,但第二个观察者没有看到通知并调用该方法。在此先感谢能够解释我在这里失踪的人吗?我在viewDidLoad和segue方法中删除了观察者,但它没有修复它。

var childVC: UIViewController!

override func viewDidLoad() {
        super.viewDidLoad()

childVC = self.storyboard?.instantiateViewControllerWithIdentifier("WordListsTableViewController")

// check for new notification - if there is segue to the SecondTableVC
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(HomeViewController.showChildVC), name: "NotificationActionPressed", object: nil) // Segue works fine.
        }

func showChildVC() {
    self.view.addSubview(childVC.view)
}

在SecondTableVC

    override func viewDidLoad() {
        super.viewDidLoad()

// check for new notification - if there is 
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(SecondTableVC.newNotif), name: "NotificationActionPressed", object: nil) 
    }

    func newNotif() {
        print("new notif") // THIS METHOD IS NOT GETTING CALLED 
    }

2 个答案:

答案 0 :(得分:1)

撇开Phillip的答案:如果绝对有必要让第二个视图控制器监听NSNotification事件,那么第二个视图控制器可以从故事板中实例化并由第一个视图控制器保存在内存中,直到它需要显示。在这种情况下,第二个视图控制器应该在初始化时订阅通知事件。

答案 1 :(得分:0)

您的segue会导致第二个视图控制器创建。如果segue是由通知触发的,那么当通知触发时SecondTableVC viewDidLoad没有发生。

第二个控制器没有收到通知,因为它不仅没有在那个时间注册,而且实际上并不存在。