从 ViewController 访问 AppDelegate 中的对象

Posted

技术标签:

【中文标题】从 ViewController 访问 AppDelegate 中的对象【英文标题】:Access object in AppDelegate from ViewController 【发布时间】:2019-05-27 14:42:57 【问题描述】:

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 中创建一个更改标题的函数,然后从您的 vc 中调用它:AppDelegate().changeStatusTitle("ELO") 我不认为从另一个类调用属于你的 AppDelegate 的函数会是好的编码风格 嗨@Koen 我得到的结果与上面的代码相同 @RX9 应用程序委托是应用程序的根单例,它在很大程度上用于处理没有任何其他更好的拥有视图控制器的对象和函数。从应用程序委托中访问数据和调用函数是一种非常标准的编码实践。 OP 遇到的问题是他没有访问单例实例。 【参考方案1】:

NSApplication获取委托对象,默认初始化器AppDelegate()创建一个新的无关实例。

let appDelegate = NSApp.delegate as! AppDelegate
appDelegate.statusItem.button?.title = "ELO: \(parsing2.chess_daily.last.rating)"

【讨论】:

以上是关于从 ViewController 访问 AppDelegate 中的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何从 AppDelegate 访问 ViewController 变量

如何从 viewController 访问 applicationDidEnterBackground

从 ViewController 访问 drawRect?

使图像可从其他 ViewController 访问

如何从 appDelegate 访问每个 ViewController?

无法从模态 ViewController 访问 UITabBarController