NSNotification addObserver 在两个 ViewControllers Swift
NSNotification addObserver in two ViewControllers Swift
在我的 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)
}
在第二个表中VC
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
}
您的 segue 导致第二个视图控制器被创建。如果 segue 是由通知触发的,那么当通知触发时 SecondTableVC
的 viewDidLoad
还没有发生。
第二个控制器没有收到通知,因为到那时它不仅没有注册,而且实际上并不存在。
有点借鉴 Phillip 的回答:如果绝对有必要让第二个视图控制器监听 NSNotification 事件,那么第二个视图控制器可以从情节提要中实例化并由第一个视图保存在内存中控制器,直到需要显示为止。在这种情况下,第二个视图控制器应该在初始化时订阅通知事件。
在我的 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)
}
在第二个表中VC
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
}
您的 segue 导致第二个视图控制器被创建。如果 segue 是由通知触发的,那么当通知触发时 SecondTableVC
的 viewDidLoad
还没有发生。
第二个控制器没有收到通知,因为到那时它不仅没有注册,而且实际上并不存在。
有点借鉴 Phillip 的回答:如果绝对有必要让第二个视图控制器监听 NSNotification 事件,那么第二个视图控制器可以从情节提要中实例化并由第一个视图保存在内存中控制器,直到需要显示为止。在这种情况下,第二个视图控制器应该在初始化时订阅通知事件。