有没有办法知道观察者是否收到/没有收到来自 NSNotificationCenter 的通知?

Is there a way to know if an observer did / did not get a notification from NSNotificationCenter?

ViewController.m 已在 [NSNotificationCenter defaultCenter] 中注册为观察员并且正在运行。但是 ViewControllerviewDidLoad 方法中执行 X。

如果ViewController没有收到通知,我希望发生X。

架构听起来确实很糟糕,但我的问题是 defaultCenter 中是否有一些数据告诉我们观察者是否收到通知?

没有 call-back 方法让我们知道发送的 notification if 是否被观察者接收到。

根据Notification Center方法我们可以得到Xcode:

/****************   Notification Center ****************/
open class NotificationCenter : NSObject {


    open class var `default`: NotificationCenter { get }


    open func addObserver(_ observer: Any, selector aSelector: Selector, name aName: NSNotification.Name?, object anObject: Any?)


    open func post(_ notification: Notification)

    open func post(name aName: NSNotification.Name, object anObject: Any?)

    open func post(name aName: NSNotification.Name, object anObject: Any?, userInfo aUserInfo: [AnyHashable : Any]? = nil)


    open func removeObserver(_ observer: Any)

    open func removeObserver(_ observer: Any, name aName: NSNotification.Name?, object anObject: Any?)


    @available(iOS 4.0, *)
    open func addObserver(forName name: NSNotification.Name?, object obj: Any?, queue: OperationQueue?, using block: @escaping (Notification) -> Swift.Void) -> NSObjectProtocol
}

而我们可以参考NotificationCenterapple docs,我们应该了解它的功能是:

Objects register with a notification center to receive notifications (NSNotification objects) using the addObserver(_:selector:name:object:) or addObserver(forName:object:queue:using:) methods.

并且从文档中找不到任何提及您的要求。

如果您正在寻找回调,请考虑 Combine,它更像是一种交易通信协议。