Swift 3、NotificationCenter观察者缺少发布的Notification
Swift 3, NotificationCenter observer missing posted Notification
Swift3 中的 NotificationCenter 似乎有一些变化,我似乎不太正确。
使用:
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
我有一个单例对象:
class Notifications {
private static let pipeline = Notifications()
...
接收订阅 NotificationsPipelineProtocol
的项目并将其排入队列。 (都是纯swift,这里没有Objective-CNSObject。)
private func enqueueNotification(_ notification: NotificationsPipelineProtocol) {
...
其中它将自己作为观察者添加到 NotificationCenter
NotificationCenter.default.addObserver(self,
selector: #selector(Notifications.didReceiveNotificationCompletion(_:)),
name: notification.completionNotificationName,
object: notification)
注意 - notification.completionNotificationName
是一个产生 Notification.Name
项的计算变量。
但是当 NotificationsPipelineProtocol
项发布到 NotificationCenter 时:
NotificationCenter.default.post(name: self.completionNotificationName, object: self)
观察者没有调用它关联的订阅方法:
@objc private func didReceiveNotificationCompletion(_ notification : Notification) {
...
你知道为什么吗?有没有办法在 NotificationCenter 中查看特定项目订阅了哪些通知?也许单身对象放弃了它的观察?也许#selector 格式不正确?
XCode 没有给我任何警告或错误。
提前致谢。
您正在将 NotificationPipelinesProtocol
对象传递给 addObserver
。这意味着您只会收到由该对象发布的通知。如果您想接收由 any object 发布的指定名称的通知,那么您应该传递 nil
:
NotificationCenter.default.addObserver(self,
selector: #selector(Notifications.didReceiveNotificationCompletion(_:)),
name: notification.completionNotificationName,
object: nil)
Swift3 中的 NotificationCenter 似乎有一些变化,我似乎不太正确。
使用:
Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)
我有一个单例对象:
class Notifications {
private static let pipeline = Notifications()
...
接收订阅 NotificationsPipelineProtocol
的项目并将其排入队列。 (都是纯swift,这里没有Objective-CNSObject。)
private func enqueueNotification(_ notification: NotificationsPipelineProtocol) {
...
其中它将自己作为观察者添加到 NotificationCenter
NotificationCenter.default.addObserver(self,
selector: #selector(Notifications.didReceiveNotificationCompletion(_:)),
name: notification.completionNotificationName,
object: notification)
注意 - notification.completionNotificationName
是一个产生 Notification.Name
项的计算变量。
但是当 NotificationsPipelineProtocol
项发布到 NotificationCenter 时:
NotificationCenter.default.post(name: self.completionNotificationName, object: self)
观察者没有调用它关联的订阅方法:
@objc private func didReceiveNotificationCompletion(_ notification : Notification) {
...
你知道为什么吗?有没有办法在 NotificationCenter 中查看特定项目订阅了哪些通知?也许单身对象放弃了它的观察?也许#selector 格式不正确?
XCode 没有给我任何警告或错误。
提前致谢。
您正在将 NotificationPipelinesProtocol
对象传递给 addObserver
。这意味着您只会收到由该对象发布的通知。如果您想接收由 any object 发布的指定名称的通知,那么您应该传递 nil
:
NotificationCenter.default.addObserver(self,
selector: #selector(Notifications.didReceiveNotificationCompletion(_:)),
name: notification.completionNotificationName,
object: nil)