Swift 3,NotificationCenter观察员失踪发布通知

时间:2017-04-15 21:25:42

标签: ios swift xcode swift3 nsnotificationcenter

Swift 3中的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-C NSObject。)

    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没有给我任何警告或错误。

提前致谢。

1 个答案:

答案 0 :(得分:5)

您正在将NotificationPipelinesProtocol对象传递给addObserver。这意味着您只会收到该对象发布的通知。如果您想接收任何对象发布的指定名称的通知,那么您应该通过nil

NotificationCenter.default.addObserver(self,
                                       selector: #selector(Notifications.didReceiveNotificationCompletion(_:)),
                                       name: notification.completionNotificationName,
                                       object: nil)