微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何阅读通知观察者

如何解决如何阅读通知观察者

所以我在一个特定的视图控制器中添加了大约四个通知观察者,但我想在满足条件时删除一个,然后将其添加回不同的条件。我能够删除特定的观察者,但我无法将其添加回来。除了删除添加回来的一个之外,其他的都可以工作,我知道当 VC 加载并添加所有通知观察者时它正在工作,但是在将其添加回来后它停止工作。这是我的代码


// registered the observer in ViewDIdAppear and this registers my bluetooth device and whenever i tap on the bluetooth device button this function gets called
NotificationCenter.default.addobserver(
    self,selector: #selector(Myclass.deviceTapped),name: Notification.Name("bluetoothRecievednoticicationName"),object: nil)

// i removed the observer here 
 if condition == false {
          NotificationCenter.default.removeObserver(self,name:  Notification.Name("bluetoothRecievednoticicationName"),object: nil)

}  

// and then use this to add it back again 
NotificationCenter.default.addobserver(
    self,object: nil)

// and after adding this ^ back the deviceTapped function doesn't get called anymore

解决方法

在这些情况下要做的事情是向自己证明这确实正常工作。这样,您就可以追踪正在做什么而阻止其工作。

例如,也许 self 在任何通知有机会到达之前就已经不存在了...?也许您没有显示的其他一些代码正在再次取消注册...?我肯定经历过这样的困惑!而且它们很难调试。

但无论解释如何,您首先需要确保自己取消注册通知然后重新注册通知没有问题。

这是一个测试应用。它有三个按钮:注册、取消注册和通知。代码如下:

let notif : Notification.Name = .init("howdy")
@objc func gotNotified() {
    print("got notified")
}
@IBAction func doRegister(_ sender: Any) {
    NotificationCenter.default.addObserver(self,selector: #selector(gotNotified),name: notif,object: nil)
}
@IBAction func doUnregister(_ sender: Any) {
    NotificationCenter.default.removeObserver(self,object: nil)
}
@IBAction func doNotify(_ sender: Any) {
    NotificationCenter.default.post(name: notif,object: nil)
}

所以用连接的按钮配置它,然后:

  1. 点击注册。

  2. 点击通知。

  3. 点击取消注册。

  4. 点击通知。

  5. 点击注册。

  6. 点击通知。

您会在第 2 和第 6 次看到,而不是第 4 次,我们打印到控制台以证明我们收到了通知 - 正如您所期望的那样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。