NotificationCenter:如何在不多次添加通知的情况下在 BaseController 中添加通知?
NotificationCenter: How to add a notification in BaseController without it being added multiple times?
我有一个 BaseViewController,我应用中的所有视图控制器都继承自这个 BaseViewController class。我想在我的一些视图控制器中收听自定义通知。我在 BaseViewController
的 viewWillAppear 和 viewWillDisappear 方法中添加了以下代码
override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(self.actOnNotification), name: NSNotification.Name("MyNotification"), object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(NSNotification.Name("MyNotification"))
}
我的应用程序的设计方式是在自定义初始视图控制器和另一个视图控制器(它们都继承自 BaseViewController)之后加载主页。基本上,它是堆栈中的第三个视图控制器。
现在,当我的应用程序主页加载时,actOnNotification
方法被调用了三次。有没有一种方法可以让它在主页加载时只调用一次?
如果我直接在应用程序的主页上收听通知,显然可以。
在 navigationController 中实现 addObserver 之后,您可以将 navigationController 用于 mainViewController
class MainNavigationViewController: UINavigationController {
override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(self.actOnNotification), name: NSNotification.Name("MyNotification"), object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(NSNotification.Name("MyNotification"))
}
}
你还可以获得currentViewcontroller
guard let currentViewcontroller = self.viewControllers.last() else { return}
我有一个 BaseViewController,我应用中的所有视图控制器都继承自这个 BaseViewController class。我想在我的一些视图控制器中收听自定义通知。我在 BaseViewController
的 viewWillAppear 和 viewWillDisappear 方法中添加了以下代码 override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(self.actOnNotification), name: NSNotification.Name("MyNotification"), object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(NSNotification.Name("MyNotification"))
}
我的应用程序的设计方式是在自定义初始视图控制器和另一个视图控制器(它们都继承自 BaseViewController)之后加载主页。基本上,它是堆栈中的第三个视图控制器。
现在,当我的应用程序主页加载时,actOnNotification
方法被调用了三次。有没有一种方法可以让它在主页加载时只调用一次?
如果我直接在应用程序的主页上收听通知,显然可以。
在 navigationController 中实现 addObserver 之后,您可以将 navigationController 用于 mainViewController
class MainNavigationViewController: UINavigationController {
override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(self.actOnNotification), name: NSNotification.Name("MyNotification"), object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(NSNotification.Name("MyNotification"))
}
}
你还可以获得currentViewcontroller
guard let currentViewcontroller = self.viewControllers.last() else { return}