我需要每次应用程序打开时运行代码,包括它是否仅被暂停(用户点击主页按钮,然后返回到应用程序)。
我已经知道viewDidLoad只会加载初始的VC加载,因此不能满足我的需要。并且viewWillAppear / viewDidAppe也不会这样做。这个SO帖子有an answer,但是它来自六年前,我不喜欢这个答案。从本质上讲,它创造了一个观察者。然而,这似乎浪费了资源,观察者创建了那些将事物保存在内存中的引用循环。
如果没有人给我一个更好的解决方案,我可能会尝试" applicationDidBecomeActive"在AppDelegate中,但我尽量不使用ViewController代码加载我的appDelegate。
我的问题是,自从这个SO线程被回答后的六年中,Swift / iOS10现在是否允许更清晰的解决方案?
答案 0 :(得分:5)
如果您不想使用NSNotificationCenter,请在 AppDelegate
中制作Viewcontroller的全局对象并使用viewController对象将代码放入 applicationDidBecomeActive
因为 applicationDidBecomeActive 会在您启动应用程序时调用everyTime,当您按下主页按钮并来自后台时,您不需要在viewWillAppear中编写代码。
答案 1 :(得分:1)
据我进一步研究后可以看出,自六年前那个帖子以来没有新方法。但是,applicationDidBecomeActive方法确实运行良好:
func applicationDidBecomeActive(_ application: UIApplication) {
guard let rvc = self.window?.rootViewController as? firstVCName else { return }
rvc.nameOfMethodYouWantToCall()
}
以上内容获取对现有VC的引用(而不是创建一个全新的实例)。然后它调用该方法,而不必使用代码加载appDelegate。非常简单有效。
我对此进行了测试,它正是我所需要的,每次打开应用程序时运行的代码。它非常一致。