2017-05-07 7 views
5

私のView Controllerには、多くの初期化されたメソッドと変数があります。私のアプリがバックグラウンドに入ると、私は、アプリケーションデリゲートからView Controllerの特定の値にアクセスする必要があります。即時のアプリケーションデリゲートからView Controllerの現在のインスタンスにアクセスできますか?

私は、アプリのデリゲートでこれを行うことを試みた:

vc = ViewController() 

...しかし、それは、新しいインスタンスを作成し、値は、本質的に新しいのように設定されています。

答えて

3

2つのオプションがあります。もう1つは設計上より優れています。

最初のオプション:

:(何をしたい)

私はあなたのビューコントローラの構造を知っているので、私はあなたがルートビューコントローラを持っていると仮定することはできません、あなたは経由AppDelegateからそれを得ることができます

rootVC = self.window?.rootViewController 

そして、あなたがルートビューコントローラ(多くのアプリケーションと同様に、提示ビューコントローラは、タブバーコントローラである)から提示ビューコントローラを取得したい場合:

guard let tabBarController = rootVC.presentedViewController as? TabBarController else { 
     return 
} 
私が言うことをしようとしていることは、あなたのビューコントローラの出発を介してジャンプする必要があり、基本的に

tabBarController.viewControllers 

:あなたのタブバーコントローラを得れば

は、ビューコントローラの配列のビューコントローラを見つけることができますあなたが望むコントローラーに到達するためにルートから、そこから変数を取得してください。これは非常にエラーが発生しやすく、一般的に推奨されません。

番目のオプション(優れた実践):

UIApplicationWillResignActiveNotification通知のオブザーバーとして、あなたのビューコントローラのレジスタを持っています。これにより、アプリがバックグラウンドに入る直前に、View Controllerから必要な操作を行うことができます。

関連する問題