2016-10-02 14 views
0

アプリの終了前に実行する必要がある(Swiftの)アプリ用のコードを書く必要があります。それは、バックグラウンドではないときにappWillTerminateをappDelegateで使用するときに機能しますが、バックグラウンドまたはフォアグラウンドの両方で終了するときにコードを実行する必要があります。私はどうすればいいのですか?バックグラウンドでアプリを終了する

+0

どのようなコードを実行する必要がありますか?データを保存しようとしているだけの場合、これは他の方法で行うことができます。 –

+0

appWillTerminate:アプリがバックグラウンドにあり、呼び出す方法がない場合は呼び出されません。私は、applicationDidEnterBackgroundにコードを書くことをお勧めします:それ以降、appWillTerminateを呼び出す方法はありません。しかし、もう一度、それはあなたが何を達成しようとしているかを控える。それがapplicationDidEnterBackgroundよりもデータを保存しようとしている場合は、移動する方法です。 – Netra

答えて

0

次の戦略が有効で、iOSよりも純粋なスウィフト言語のアプローチの方が優れています。すべてのクラスでdeinitメソッドをオーバーライドできます。クラスをヒープから解放する必要があるときはいつでも、クラスが解放される前にde-initializerが呼び出されます。これは、クラスがスコープから外れても保持カウントがなくなった場合などに発生します。アプリの終了時にAppDelegateが発生する可能性があります。

0

このメソッドには、applicationDidEnterBackgroundのbeginBackgroundTaskWithName:expirationHandler:というコードを記述できます。このメソッドは、終了する必要があるいくつかのタスクを終了する余分な時間をアプリケーションに与えます。その他のドキュメンテーションは、有限長のタスクを実行すると、ここでです:アプリがバックグラウンドで動作していると、任意のタスクの実行を持っていない場合はhttps://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

0

、その後、アプリが一時停止中です。 アプリケーションがサスペンド状態のとき、終了アプリはapplicationWillTerminateを呼び出しません。しかし、バックグラウンドタスク を起動するか、バックグラウンドモードを有効にすることができます。例:

func applicationDidEnterBackground(_ application: UIApplication) { 

     bgTask = application.beginBackgroundTask(withName: "MyTask") { 
      application.endBackgroundTask(self.bgTask!) 
      self.bgTask = UIBackgroundTaskInvalid 
     } 

} 
関連する問題