5
我的视图控制器有许多初始化的方法和变量。当我的应用程序进入后台时,我需要从应用程序代理访问视图控制器中的特定值。从swift中的应用程序委托访问视图控制器的当前实例?
我试图做到这一点的应用程序委托:
vc = ViewController()
...但是,使一个新的实例,和值基本上设定如新。
我的视图控制器有许多初始化的方法和变量。当我的应用程序进入后台时,我需要从应用程序代理访问视图控制器中的特定值。从swift中的应用程序委托访问视图控制器的当前实例?
我试图做到这一点的应用程序委托:
vc = ViewController()
...但是,使一个新的实例,和值基本上设定如新。
你有两个选择,第二个选项是更好的设计。
第一种选择:(你想要的)
我不知道你的视图控制器的结构,所以让我假设你有一个根视图控制器,你可以从AppDelegate
通过得到它:
rootVC = self.window?.rootViewController
如果你想从根视图控制器呈现视图控制器(如许多应用程序,所提出的视图控制器是一个标签栏控制器):
guard let tabBarController = rootVC.presentedViewController as? TabBarController else {
return
}
一旦你的标签栏控制器,你可以找到视图控制器的阵列中的视图控制器:
tabBarController.viewControllers
从本质上讲,我想说的是,你必须通过你的视图控制器开始跳从根到达你想要的控制器,然后从那里获取变量。这很容易出错,一般不推荐。
第二个选项(更好的做法):
让你的视图控制器寄存器作为UIApplicationWillResignActiveNotification
通知的观察员。这将允许您在应用即将进入后台时从视图控制器执行任何您想要的操作。