无法接收来自通知中心的通知
can't receive notifications from Notification Center
我有一个简单的应用程序:
首先 VC:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.post(name: NSNotification.Name("test"), object: nil, userInfo: nil)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "secondVC")
self.present(vc, animated: true, completion: nil)
}
}
秒VC:
class 第二VC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(SecondVC.testFunc(notification:)), name: NSNotification.Name("test"), object: nil)
}
@objc func testFunc(notification: NSNotification) {
print("!!!!!!!!!!!!!!!!")
}
deinit {
NotificationCenter.default.removeObserver(self)
}
}
而且我从来没有看到“!!!!!!!!!!!!!!!!”,我做错了什么?
正在发生的事情是,您从第一个视图控制器 post 在 viewDidLoad 中发送通知,然后在 viewDidAppear 你正在推送你的第二个视图控制器,然后订阅通知中心。那时你的通知已经被解雇,因此你没有收到它。您的第二个视图控制器将仅接收被触发的通知 post 它对通知中心的订阅。创建一个计时器,它会在视图出现后几秒钟内触发通知推送你的第二个视图控制器,你会看到它工作
在上面提到的代码中,您首先 post 发送通知,然后为其添加观察者。因此,为了调用 testFunc 方法,您需要先添加 Observer 然后 post 通知。
您可以在 firstVC 中为 posting 通知添加几秒延迟。
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
NotificationCenter.default.post(name: NSNotification.Name("test"), object: nil, userInfo: nil)
}
}
我有一个简单的应用程序: 首先 VC:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.post(name: NSNotification.Name("test"), object: nil, userInfo: nil)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "secondVC")
self.present(vc, animated: true, completion: nil)
}
}
秒VC:
class 第二VC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(SecondVC.testFunc(notification:)), name: NSNotification.Name("test"), object: nil)
}
@objc func testFunc(notification: NSNotification) {
print("!!!!!!!!!!!!!!!!")
}
deinit {
NotificationCenter.default.removeObserver(self)
}
}
而且我从来没有看到“!!!!!!!!!!!!!!!!”,我做错了什么?
正在发生的事情是,您从第一个视图控制器 post 在 viewDidLoad 中发送通知,然后在 viewDidAppear 你正在推送你的第二个视图控制器,然后订阅通知中心。那时你的通知已经被解雇,因此你没有收到它。您的第二个视图控制器将仅接收被触发的通知 post 它对通知中心的订阅。创建一个计时器,它会在视图出现后几秒钟内触发通知推送你的第二个视图控制器,你会看到它工作
在上面提到的代码中,您首先 post 发送通知,然后为其添加观察者。因此,为了调用 testFunc 方法,您需要先添加 Observer 然后 post 通知。
您可以在 firstVC 中为 posting 通知添加几秒延迟。
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0) {
NotificationCenter.default.post(name: NSNotification.Name("test"), object: nil, userInfo: nil)
}
}