Как изменить NSStatusItem вне класса

Я создаю NSStatusItem в классе с именем StatusMenuController, как это

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

Я могу легко изменить название в этом классе. Он изменится, как я и ожидал.

Я ссылаюсь на этот класс в AppDelegate

let statusMenu = StatusMenuController()

Добавить изменить его в другом классе

statusMenu.statusItem.title = "24:31"

Я ожидаю, что текст 25:00 изменится на "24:31", но это выглядит так.снимок экрана

Система создает еще один NSStatusItem. Как я могу изменить тот, который создан в StatusMenuController.


person Jinyu Meng    schedule 12.08.2017    source источник
comment
Как получить ссылку на statusMenu в другом классе?   -  person vadian    schedule 12.08.2017
comment
Если вы создадите еще один StatusMenuController, Система создаст еще один NSStatusItem. Разве вы не создаете два StatusMenuController, один из пера, один с вашим кодом StatusMenuController()?   -  person OOPer    schedule 13.08.2017
comment
Есть только один объект. Но кто-то упомянул меня, что это может быть проблема с таймером. statusMenu.statusItem.title = "24:31" вызывается таймером.   -  person Jinyu Meng    schedule 13.08.2017


Ответы (1)


Комментарий ООПера правильный. Я нашел объект, который создает еще один StatusMenuController из раскадровки. удаляю объект, дальше все ок.

person Jinyu Meng    schedule 13.08.2017