如何解决如何阅读通知观察者
所以我在一个特定的视图控制器中添加了大约四个通知观察者,但我想在满足条件时删除一个,然后将其添加回不同的条件。我能够删除特定的观察者,但我无法将其添加回来。除了删除并添加回来的一个之外,其他的都可以工作,我知道当 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)
}
所以用连接的按钮配置它,然后:
-
点击注册。
-
点击通知。
-
点击取消注册。
-
点击通知。
-
点击注册。
-
点击通知。
您会在第 2 和第 6 次看到,而不是第 4 次,我们打印到控制台以证明我们收到了通知 - 正如您所期望的那样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。