2017-08-12 2 views
0

erstelle ich eine NSStatusItem in einer Klasse mit dem Namen StatusMenuController wie dieseWie NSStatusItem ändert

class StatusMenuController: NSObject { 

let statusItem = NSStatusBar.system().statusItem(withLength: NSVariableStatusItemLength) 

override func awakeFromNib() { 
    let icon = NSImage(named: "MenuBar") 
    icon?.isTemplate = true // best for dark mode 

    if let button = statusItem.button { 
     button.image = icon 
     button.action = #selector(StatusMenuController.showPomoNow) 
     button.sendAction(on: [.leftMouseUp, .rightMouseUp]) 
     button.target = self 
    } 
    statusItem.title = "25:00" 
} 

ich den Titel leicht in dieser Klasse ändern kann. Es wird sich ändern, wie ich es erwartet habe.

Referenz mir diese Klasse in AppDelegate

let statusMenu = StatusMenuController() 

hinzufügen Änderung in anderer Klasse

statusMenu.statusItem.title = "24:31" 

Ich erwarte, dass der Text 25:00 wird auf "24:31" ändern, aber es sieht aus wie Dies. screenshot

System erstellen ein anderes NSStatusItem. Wie kann ich das ändern, was in StatusMenuController erstellt wurde?

+0

Wie bekomme ich den Verweis auf 'statusMenu' in der * anderen Klasse *? – vadian

+0

Wenn Sie einen anderen 'StatusMenuController' erstellen, erstellen _System ein anderes NSStatusItem_. Erstellen Sie nicht zwei 'StatusMenuController', einen aus der Nib, einen mit Ihrem Code' StatusMenuController() '? – OOPer

+0

Es gibt nur ein Objekt. Aber jemand erwähnt mich, es könnte ein Timer-Problem sein. 'StatusMenu.statusItem.title =" 24:31 "' wird von einem Timer aufgerufen. –

Antwort

0

OOPers Kommentar ist richtig. Ich habe ein Objekt gefunden, das einen anderen StatusMenuController aus dem Storyboard erstellt. Ich lösche das Objekt, dann ist alles in Ordnung.