swift ios - How to run function in ViewController from AppDelegate

风流意气都作罢 提交于 2019-11-29 11:22:47

ViewController().grabData() will create a new instance of the ViewController and call this function. Then.. as the view controller is not in use it will be garbage collected/removed from memory. You need to be calling this method on the actual view controller that is in use. Not a new instance of it.

The best option would be to listen for the UIApplicationDidBecomeActive notification that iOS provides.

NotificationCenter.default.addObserver(
    self,
    selector: #selector(grabData),
    name: NSNotification.Name.UIApplicationDidBecomeActive,
    object: nil)

make sure that you also remove the observer, this is usually done in a deinit method

deinit() {
    NotificationCenter.default.removeObserver(self)
} 

I simply solved it like this:

func applicationDidBecomeActive(_ application: UIApplication) {
        let viewController = self.window?.rootViewController as! ViewController
        viewController.grabData()
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!