2017-02-13 14 views
0

アプリが開くたびに実行されるコードが必要です(ユーザーがホームボタンを押してからアプリに戻っただけです)。実行コードが毎回アプリが開く - より良い方法ですか?

私は既にviewDidLoadが最初のVCの読み込み時にしか読み込まれないことを知っています。したがって、私は必要なことをしません。 viewWillAppear/viewDidAppearもそれをしません。このSOスレッドにはan answerがありますが、それは6年前からのものです。私はその答えが大好きではありません。基本的には、オブザーバーを作成すると言います。しかし、それはリソースの浪費のようであり、オブザーバーは物事を記憶に残す参照ループを作成します。

誰も私に良い解決策を与えてくれない場合は、AppDelegateで "applicationDidBecomeActive"を試してみるかもしれませんが、私のappDelegateをViewControllerコードで読み込まないようにしています。

私の質問は、このSOスレッドが回答してから6年後、Swift/iOS10は現在よりクリーンなソリューションを可能にしていますか?

+0

View ControllerのコードをAppDelegateに置かないようにすることをお勧めしますが、View Controllerにそのメソッドを転送することは問題ありません。https://en.wikipedia.org/wiki/Forwarding_(object-oriented_programming)。 – user3581248

+0

これを確認してくださいhttps://developer.apple.com/reference/uikit/uiapplicationdidbecomeactivenot – ogres

答えて

5

あなたはにNSNotificationCenterよりは、あなたのViewControllerのグローバルオブジェクトを作る使用したくない場合はAppDelegate

applicationDidBecomeActive呼び出しているので、あなたのViewControllerオブジェクト

applicationDidBecomeActiveにコードを置きますいつでもアプリケーションを起動し、ホームボタンを押して背景から来たときに、viewWillAppearでコードを書く必要はありません。

+0

ありがとうございました!私の日を救った –

0

私は追加の研究の後で言うことができる限り、6年前のその記事以来、新しい方法はありません。しかし、applicationDidBecomeActiveアプローチはうまく機能しない:

func applicationDidBecomeActive(_ application: UIApplication) { 
    guard let rvc = self.window?.rootViewController as? firstVCName else { return } 
    rvc.nameOfMethodYouWantToCall() 
} 

を上記(代わりに、全く新しいインスタンスを作成する)既存のVCへの参照を取得します。次に、appDelegateをコードでロードすることなく、メソッドを呼び出します。非常に簡単で効率的です。

私はこれをテストしました。これは、アプリが開かれるたびに実行されるコードです。それは非常に一貫しています。

関連する問題