我正在创建一个Mac菜单栏应用,我希望在用户切换可见桌面空间(包括外部显示器)时收到通知。这是一个仅限菜单栏的应用程序(即没有实际窗口)。
我已经看到了一些类似的问题,但没有一个答案似乎对我有用。我见过的大多数答案都涉及在NSWorkspaceActiveSpaceDidChangeNotification
的通知中心观察NSWorkspace
。
我已尝试在applicationDidFinishLaunching
的AppDelegate中观察此内容我有以下代码:
NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self,
selector: Selector(spaceChanged()),
name: NSWorkspaceActiveSpaceDidChangeNotification,
object: nil)
在我的spaceChanged()
功能中,我只是打印一些东西到控制台进行调试。此功能仅在应用启动时调用。每当我更改桌面空间时,我都会收到通知。
我有什么遗失的东西吗?任何帮助表示赞赏。
答案 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
)