5
我的視圖控制器有許多初始化的方法和變量。當我的應用程序進入後臺時,我需要從應用程序代理訪問視圖控制器中的特定值。從swift中的應用程序委託訪問視圖控制器的當前實例?
我試圖做到這一點的應用程序委託:
vc = ViewController()
...但是,使一個新的實例,和值基本上設定如新。
我的視圖控制器有許多初始化的方法和變量。當我的應用程序進入後臺時,我需要從應用程序代理訪問視圖控制器中的特定值。從swift中的應用程序委託訪問視圖控制器的當前實例?
我試圖做到這一點的應用程序委託:
vc = ViewController()
...但是,使一個新的實例,和值基本上設定如新。
你有兩個選擇,第二個選項是更好的設計。
第一種選擇:(你想要的)
我不知道你的視圖控制器的結構,所以讓我假設你有一個根視圖控制器,你可以從AppDelegate
通過得到它:
rootVC = self.window?.rootViewController
如果你想從根視圖控制器呈現視圖控制器(如許多應用程序,所提出的視圖控制器是一個標籤欄控制器):
guard let tabBarController = rootVC.presentedViewController as? TabBarController else {
return
}
一旦你的標籤欄控制器,你可以找到視圖控制器的陣列中的視圖控制器:
tabBarController.viewControllers
從本質上講,我想說的是,你必須通過你的視圖控制器開始跳從根到達你想要的控制器,然後從那裏獲取變量。這很容易出錯,一般不推薦。
第二個選項(更好的做法):
讓你的視圖控制器寄存器作爲UIApplicationWillResignActiveNotification
通知的觀察員。這將允許您在應用即將進入後臺時從視圖控制器執行任何您想要的操作。