我的视图控制器有许多初始化的方法和变量.当我的应用程序进入后台时,我需要从app delegate访问视图控制器中的特定值.
我试图在app委托中执行此操作:
vc = ViewController()
Run Code Online (Sandbox Code Playgroud)
...但是这会产生一个新实例,并且值基本上设置为新的.
您有两个选择,第二个在设计上更好。
第一个选项:(你想要什么)
我不知道你的视图控制器的结构,所以让我假设你有一个根视图控制器,你可以AppDelegate通过以下方式获得它:
rootVC = self.window?.rootViewController
Run Code Online (Sandbox Code Playgroud)
如果你想从根视图控制器获取呈现的视图控制器(像许多应用程序一样,呈现的视图控制器是一个标签栏控制器):
guard let tabBarController = rootVC.presentedViewController as? TabBarController else {
return
}
Run Code Online (Sandbox Code Playgroud)
获得标签栏控制器后,您可以在视图控制器数组中找到视图控制器:
tabBarController.viewControllers
Run Code Online (Sandbox Code Playgroud)
本质上,我想说的是,您必须从根目录开始跳过视图控制器以到达您想要的控制器,然后从那里获取变量。这很容易出错,通常不推荐。
第二种选择(更好的做法):
让您的视图控制器注册为UIApplicationWillResignActiveNotification通知的观察者。当您的应用程序即将进入后台时,这将允许您从视图控制器中执行任何您想要的操作。
| 归档时间: |
|
| 查看次数: |
2473 次 |
| 最近记录: |