【问题标题】:Why some Notifications.userInfo is nil?为什么某些 Notifications.userInfo 为零?
【发布时间】:2021-11-04 15:45:58
【问题描述】:

一个例子: 为什么这个通知“didActivateApplicationNotification”

NSWorkspace.shared.notificationCenter.addObserver(self,
                    selector: #selector(updateOnFocus(notification:)),
                    name: NSWorkspace.didActivateApplicationNotification,
                    object:nil)

通过用户信息字典传递通知 -> 下面的代码 = 返回通知

NSConcreteNotification 0x60000191e3d0 {name = NSWorkspaceDidActivateApplicationNotification; object = <NSWorkspace: 0x6000015443d0>; userInfo = {
    NSWorkspaceApplicationKey = "<NSRunningApplication: 0x60000394a800 (com.apple.ActivityMonitor - 6940) LSASN:{hi=0x0;lo=0x2aa2aa}>";
}}

还有这个通知“activeSpaceDidChangeNotification”

NSWorkspace.shared.notificationCenter.addObserver(self,
                   selector: #selector(updateOnSpaceChange(notification:)),
                   name: NSWorkspace.activeSpaceDidChangeNotification,
                   object: nil)

不通过通知传递用户信息字典? -> 下面的代码 = 返回通知

NSConcreteNotification 0x60000191e160 {name = NSWorkspaceActiveSpaceDidChangeNotification; object = <NSWorkspace: 0x6000015443d0>}

我怎样才能padronize这个通知?

【问题讨论】:

    标签: swift observers


    【解决方案1】:

    没有“为什么”,不,你无法改变这一点。这些通知来自运行时。某些类型的通知在userInfo 中带有额外的信息,而另一些则没有。它的工作方式就是它的工作方式。结束。

    这一切都有很好的记录。 didActivate documentation 说:

    通知对象是共享的 NSWorkspace 实例。 userInfo 字典包含 applicationUserInfoKey 键和对应的 NSRunningApplication 实例,代表受影响的应用程序。

    这就是您的用户信息。但是activeSpace documentation 说:

    通知不包含userInfo 字典。

    你去。

    【讨论】:

      猜你喜欢
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      相关资源
      最近更新 更多