2016-05-06 4 views
0

Ich erstelle eine Mac-Menüleiste App, die ich benachrichtigt werden soll, wenn der Benutzer den sichtbaren Desktop-Bereich (einschließlich externer Monitore) wechselt. Dies ist eine App nur für die Menüleiste (d. H. Kein tatsächliches Fenster).(OS X) Wie benachrichtigt werden, wenn der Benutzer den Mac Desktop-Bereich wechselt

Ich habe ein paar ähnliche Fragen gesehen, aber keine der Antworten schien für mich zu funktionieren. Die meisten Antworten, die ich gesehen habe, beinhalten die Beobachtung von NSWorkspaceActiveSpaceDidChangeNotification in der Benachrichtigungszentrale von NSWorkspace.

Ich habe versucht, zu beobachten dies in meinem AppDelegate in applicationDidFinishLaunching Ich habe den folgenden Code:

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

In meiner spaceChanged() Funktion bin ich nur etwas für Debugging-Zwecke zu trösten drucken. Diese Funktion wird nur beim App-Start aufgerufen. Wenn ich den Desktop-Speicherplatz ändere, werde ich nie benachrichtigt.

Gibt es etwas, das mir fehlt? Jede Hilfe wird geschätzt.

Antwort

0

Anstatt Selector(spaceChanged()) sollten Sie #selector(spaceChanged) verwenden. Mit Selector(spaceChanged()) rufen Sie diese Funktion tatsächlich sofort auf und verwenden das Ergebnis (das wahrscheinlich nur ein leeres Tupel () ist), um einen Nullselektor zu erstellen. Die letztere Syntax erzeugt tatsächlich den richtigen Selektor, der auf Ihre spaceChanged-Funktion verweist.

+0

wow, vielen Dank! Ich habe mir die beiden ein bisschen genauer angesehen und für alle Interessierten ist dies ein hilfreicher Beitrag: http://en.swifter.tips/selector/. Danke nochmal @jtbandes – chetem