В AppDelegate.swift я объявил объект NSStatusBar следующим образом:
var statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
statusItem.button?.title = "chess"
statusItem.button?.target = self
statusItem.button?.action = #selector(showSettings)
и работает нормально, но я хочу изменить заголовок на viewController.swift
Я пытаюсь это (контроллер представления):
var appd = AppDelegate()
appd.statusItem.button?.title = "ELO: \(parsing2.chess_daily.last.rating)"
Но название не меняется... как я могу это сделать???
Я не думаю, что вызов функций, принадлежащих вашему AppDelegate, из другого класса был бы хорошим стилем кодирования.
Привет @Koen, я получаю тот же результат, что и мой код выше.
@ RX9 делегат приложения является корневым синглтоном приложения, которое в значительной степени предназначено для обработки объектов и функций, у которых нет другого лучшего контроллера представления. Доступ к данным и вызов функций в делегате приложения — очень стандартная практика кодирования. Проблема, с которой сталкивается OP, заключается в том, что он не получает доступ к экземпляру singleton.
Получите объект делегата от NSApplication
, инициализатор по умолчанию AppDelegate()
создаст новый несвязанный экземпляр.
let appDelegate = NSApp.delegate as! AppDelegate
appDelegate.statusItem.button?.title = "ELO: \(parsing2.chess_daily.last.rating)"
Попробуйте создать функцию в своем
AppDelegate
, которая меняет заголовок, а затем вызовите ее из своего vc:AppDelegate().changeStatusTitle("ELO")