(OS X)当用户切换mac桌面空间时如何通知

时间:2016-05-06 07:00:37

标签: swift macos cocoa

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

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

我已尝试在applicationDidFinishLaunching的AppDelegate中观察此内容我有以下代码:

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

在我的spaceChanged()功能中,我只是打印一些东西到控制台进行调试。此功能仅在应用启动时调用。每当我更改桌面空间时,我都会收到通知。

我有什么遗失的东西吗?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

Swift的更新:

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