(OS X)如何在用户切换 Mac 桌面空间时收到通知?

7
我正在创建一个Mac菜单栏应用程序,希望在用户切换可见的桌面空间(包括外部监视器)时得到通知。这是一个仅菜单栏应用程序(即没有实际窗口)。
我看到了一些类似的问题,但是没有一个答案适用于我。大多数答案都涉及观察NSWorkspace的通知中心上的NSWorkspaceActiveSpaceDidChangeNotification
我尝试在我的AppDelegate中观察它,在applicationDidFinishLaunching中我有以下代码: NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: Selector(spaceChanged()), name: NSWorkspaceActiveSpaceDidChangeNotification, object: nil) 在我的spaceChanged()函数中,我只是为了调试目的打印一些内容到控制台。然而,无论何时我改变桌面空间,我都没有收到通知。
是否有什么我错过的地方?任何帮助将不胜感激。
2个回答

3

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


1
哇,非常感谢!最后我更深入地了解了这两个,对于任何有兴趣的人来说,这是一个有用的帖子:http://en.swifter.tips/selector/。再次感谢@jtbandes。 - chetem
Swift 5的更新: NSWorkspace.shared.notificationCenter.addObserver( self, selector: #selector(spaceChanged), name: NSWorkspace.activeSpaceDidChangeNotification, object: nil ) - appsmatics

3

Swift 的更新:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接