【问题标题】:Need to know all the listeners in a NSNotification object需要知道 NSNotification 对象中的所有监听器
【发布时间】:2018-05-11 11:32:56
【问题描述】:

我正在使用 NSNotificationCenter 对象。我需要知道所有的听众和他们收听的事件。我可以做些什么来获得此列表吗?

【问题讨论】:

  • 如果没有更多关于您想要达到的目标的信息,将很难为您提供帮助。通过 NSNotificationCenter 的通知意味着由用户管理 - 整个目的是松散地耦合事件和订阅者。

标签: objective-c ios nsnotificationcenter


【解决方案1】:

不;为什么你需要知道?

通知的整个目标是创建一个松散耦合的观察者与通知者系统。 “了解所有”的问题本身没有意义,因为很可能会有来自您根本没有编写的代码的通知的观察者(假设是系统通知)。

当然,如果您创建的通知对您的应用来说是唯一命名的,那么您还应该知道所有可能的观察者。

【讨论】:

  • 我没有收到我的事件通知,因此我想调试它。这就是我需要知道听众和观察者是什么的原因。
  • 用于调试?说得通。但是 - 仍然 - 不,没有办法做到这一点。
  • 今天解决了这个问题。在一个地方使用了错误的对象作为发件人,它把其他地方搞砸了!无论如何,非常感谢。
【解决方案2】:

如果您只想调试哪些侦听器正在侦听哪些通知,您可以很容易地记录此信息:

NSLog(@"%@", [NSNotificationCenter defaultCenter].debugDescription);

po [NSNotificationCenter defaultCenter]

将在调试器中打印出类似的内容:

<NSNotificationCenter:0x6080000c0070>
Name, Object, Observer, Options
NSWindowWillEnterFullScreenNotification, 0x7fff882e5958, 0x604000100cf0, 1400
NSAntialiasThresholdChangedNotification, 0x7fff882e5958, 0x100e00000, 1400
NSAntialiasThresholdChangedNotification, 0x7fff882e5958, 0x6040001e0300, 1400
NSAntialiasThresholdChangedNotification, 0x7fff882e5958, 0x100f1aa10, 1400
kCFLocaleCurrentLocaleDidChangeNotification, 0x7fff882e5958, 0x7fff882e5a38, 1001
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多