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

che*_*tem 5 macos cocoa swift

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

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

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

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

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

有什么我想念的吗?任何帮助表示赞赏。

jtb*_*des 3

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