如何在appdelegate中调用viewController的方法

Posted

技术标签:

【中文标题】如何在appdelegate中调用viewController的方法【英文标题】:How to call viewController's method in appdelegate 【发布时间】:2018-01-16 08:20:38 【问题描述】:

我想要 viewController 的更新数据的方法。

所以我想在applicationDidBecomeActive(_ application: UIApplication)时使用viewController的更新方法。

怎么可能?

【问题讨论】:

class_obj.method() 不工作? 在提出关于 SO 的问题之前,您确实需要做一些研究。请先阅读How to Ask,然后再询问其他人 【参考方案1】:

使用UIApplicationDidBecomeActiveNotification。看到这个answer。

【讨论】:

【参考方案2】:

这可能会对您有所帮助(在 Swift 4 中测试)

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self,
                                               selector: #selector(applicationDidBecomeActive),
                                               name: Notification.Name.UIApplicationDidBecomeActive,
                                               object: nil)
    



@objc func applicationDidBecomeActive() 
    print("UIApplicationDidBecomeActive")

注意:当您的视图控制器不再使用/内存时,不要忘记删除观察者(因为这是应用程序级别的观察者,每次您的应用程序激活时都会调用,无论是您的视图控制器是否处于活动状态。

这里是删除观察者的代码:

NotificationCenter.default.removeObserver(self,
                                          name: Notification.Name.UIApplicationDidBecomeActive,
                                          object: nil)

【讨论】:

我做到了。谢谢! @usinuniverse - 当您的视图控制器不再使用/内存时,不要忘记删除观察者。查看更新的答案

以上是关于如何在appdelegate中调用viewController的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在appdelegate中调用viewController的方法

Swift开发教程--如何在别的类中调用AppDelegate中的方法

如何从 UI Xctest 调用 Appdelegate 的“OpenURL”功能

如何在不传递委托的情况下从 RootViewController 调用 AppDelegate 方法?

来自 appDelegate 的 javascript 调用:phonegap iOS

如何在 AppDelegate.swift 中按常规顺序调用 ViewController