【问题标题】:(OS X) How to be notified when user switches mac desktop space(OS X) 用户切换mac桌面空间时如何通知
【发布时间】:2016-05-06 07:00:37
【问题描述】:

我正在创建一个 Mac 菜单栏应用程序,我希望在用户切换可见桌面空间(包括外部显示器)时收到通知。这是一个仅限菜单栏的应用程序(即没有实际窗口)。

我见过一些类似的问题,但似乎没有一个答案对我有用。我看到的大多数答案都涉及在NSWorkspace 的通知中心观察NSWorkspaceActiveSpaceDidChangeNotification

我尝试在 applicationDidFinishLaunching 的 AppDelegate 中观察到这一点,我有以下代码:

NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: Selector(spaceChanged()), name: NSWorkspaceActiveSpaceDidChangeNotification, object: nil)

在我的spaceChanged() 函数中,我只是为了调试目的打印一些东西到控制台。这个函数只会在应用启动时被调用。每当我更改桌面空间时,我都不会收到通知。

我有什么遗漏吗?任何帮助表示赞赏。

【问题讨论】:

    标签: swift macos cocoa


    【解决方案1】:

    您应该使用#selector(spaceChanged) 而不是Selector(spaceChanged())。使用Selector(spaceChanged()),您实际上是立即调用此函数,并使用结果(可能只是一个空元组())来创建一个空选择器。后一种语法实际上创建了引用您的 spaceChanged 函数的正确选择器。

    【讨论】:

    • 哇,非常感谢!我最终对这两者进行了更多研究,对于任何感兴趣的人来说,这是一个有用的帖子:en.swifter.tips/selector。再次感谢@jtbandes
    • Swift 5 的更新:``NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(spaceChanged), name: NSWorkspace.activeSpaceDidChangeNotification, object: nil) ``
    【解决方案2】:

    Swift 更新:

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

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多