0

I create a NSStatusItem in a class named StatusMenuController like this

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"
}

I can change the title easily in this class. It will change like I expected.

I reference this class in AppDelegate

let statusMenu = StatusMenuController()

Add change it in other class

statusMenu.statusItem.title = "24:31"

I expect the text 25:00 will change to "24:31",but it looks like this.screenshot

System create another NSStatusItem. How can I change the one which created in StatusMenuController.

Jinyu Meng
  • 321
  • 2
  • 13
  • How do get the reference to `statusMenu` in the *other class*? – vadian Aug 12 '17 at 18:37
  • If you create another `StatusMenuController`, _System create another NSStatusItem_. Aren't you creating two `StatusMenuController`, one from nib, one with your code `StatusMenuController()`? – OOPer Aug 13 '17 at 04:17
  • There is just one object. But someone mention me it might be a timer problem .`statusMenu.statusItem.title = "24:31"` is called by a timer. – Jinyu Meng Aug 13 '17 at 06:13

1 Answers1

0

OOPer‘s comment is right. I found a object which create another StatusMenuController from Storyboard. I delete the object,Then everything is OK.

Jinyu Meng
  • 321
  • 2
  • 13