NotificationCenter swift3无法观察帖子

Posted

技术标签:

【中文标题】NotificationCenter swift3无法观察帖子【英文标题】:NotificationCenter swift3 Can't observe post 【发布时间】:2017-02-24 10:44:48 【问题描述】:

我有 3 个通知:

NotificationCenter.default.post(name:NSNotification.Name("Notification1"), object: nil)
NotificationCenter.default.post(name:NSNotification.Name("Notification2"), object: nil)
NotificationCenter.default.post(name:NSNotification.Name("Notification3"), object: nil)

对于每个帖子,我在视图控制器中都有一个不同的观察者

第一NotificationCenter.default.addObserver(forName:NSNotification.Name("Notification1"), object: nil, queue: nil, using: updateUx)

第二NotificationCenter.default.addObserver(forName:NSNotification.Name("Notification2"), object: nil, queue: nil, using: updateUx)

第三NotificationCenter.default.addObserver(forName:NSNotification.Name("Notification3"), object: nil, queue: nil, using: updateUx)

updateUx 函数仅包含通知的打印。

我只收到了第一个通知,我无法捕捉其他两个,我不知道为什么。

【问题讨论】:

无法收到您的第一个通知。你不是在观察Notification1,而是在观察DashboardNotification 你确定添加观察者和后观察者的名字是一样的吗? 尝试更改NotificationCenter.default.addObserver,如下所示。它应该工作。我试过了,确实可以。 对不起,我把这个贴在 github 上,我改了名字,我编辑了我的问题。 我在使用此代码时没有遇到任何问题。您确定添加了您的观察者,然后发布了通知吗? 【参考方案1】:

添加您的观察者,如下所示:

NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification1"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification2"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification3"), object: nil)

你可以走了。


编辑: 完整源代码(该项目有一个 UIButton 在视图中,@IBAction 在情节提要中连接到它。点击该按钮后,将发布所有 3 个通知。日志应该在控制台中打印三次)

class ViewController: UIViewController 

    override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification1"), object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification2"), object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(updateUx), name: NSNotification.Name("Notification3"), object: nil)
    

    override func viewWillDisappear(_ animated: Bool) 
        super.viewWillDisappear(animated)
        NotificationCenter.default.removeObserver(self)
    

    @IBAction func abc (_ sender: UIButton) 
        NotificationCenter.default.post(name:NSNotification.Name("Notification1"), object: nil)
        NotificationCenter.default.post(name:NSNotification.Name("Notification2"), object: nil)
        NotificationCenter.default.post(name:NSNotification.Name("Notification3"), object: nil)
    

    func updateUx()
        print("received...")
    

【讨论】:

以上是关于NotificationCenter swift3无法观察帖子的主要内容,如果未能解决你的问题,请参考以下文章

关于swift3.0关于弹出键盘高度的问题

关于swift3.0关于弹出键盘高度的问题

Swift 3 - 如何使用枚举原始值作为 NSNotification.Name?

继承 NotificationCenter 的优点和缺点

为啥 `NotificationCenter+Rx` 在 RxCocoa 而不是 RxSwift

Swift 学习之 NotificationCenter