web-dev-qa-db-ja.com

iOS 4.0のApplicationWillTerminate

IOS 4.0でapplicationWillTerminateデリゲートメソッドが呼び出されないホームボタンを押すと、applicationWillResignActiveおよびapplicationDidEnterBackgroundデリゲートメソッドが呼び出されるのがわかります。

 - (void)applicationWillResignActive:(UIApplication *)application
{
  NSLog(@"Application Did Resign Active");
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  NSLog(@"Application Did Enter Background");
}

ホームボタンをダブルタップしてアプリケーションを再度起動すると、applicationWillEnterForegroundおよびapplicationDidBecomeActiveデリゲートメソッドが呼び出されていることがわかります。

 - (void)applicationWillEnterForeground:(UIApplication *)application
{
  NSLog(@"Application Will Enter Foreground");
}



- (void)applicationDidBecomeActive:(UIApplication *)application
{
  NSLog(@"Application Did Become Active");
}

しかし、applicationWillTerminateデリゲートメソッドがいつ呼び出され、DB /ファイルバックアップルーチンを実行するかを知りたいのです。

- (void)applicationWillTerminate:(UIApplication *)application{

}

マイナス記号を押してバックグラウンドで実行されているアプリを削除することもできましたが、それでもデリゲートメソッドは呼び出されませんでした。

何か案は ???

36
Biranchi

IPhoneアプリケーションプログラミングガイドから:

IPhone SDK 4以降を使用してアプリケーションを開発する場合でも、アプリケーションを終了する準備をする必要があります。メモリが制限されると、システムはより多くのスペースを作るためにメモリからアプリケーションを削除する場合があります。アプリケーションが現在中断されている場合、システムは通知なしにアプリケーションをメモリから削除します。ただし、アプリケーションが現在バックグラウンドで実行されている場合、システムはアプリケーションデリゲートのapplicationWillTerminate:メソッドを呼び出します。アプリケーションは、このメソッドから追加のバックグラウンド実行時間を要求できません。

そのため、はい。通常、iOS 4ではapplicationWillTerminate:はあまり呼び出されません。データを保存する必要がある場合は、applicationWillTerminate:applicationDidEnterBackground:の両方で行う必要があります。

52
Ole Begemann

WWDC 2010セッション iPhone OSでのマルチタスクの採用パート2 )は、アプリケーションの状態遷移を非常によく説明しています。

4
falconcreek

ユーザーがiOS4でホームボタンを押したときにアプリを終了するための1つの解決策を得ました。これにより、バックグラウンドプロセスに入る代わりに、applicationWillTerminateデリゲートメソッドが呼び出されます。

  1. Info.plistファイルを開きます
  2. キーUIApplicationExitsOnSuspendを追加します。
  3. 新しいキーをYESに設定します
2
Biranchi

実際には、この手順を使用して行うこともできます。

  1. Info.plistファイルを開きます
  2. キーを追加->アプリケーションがバックグラウンドで実行されない
  3. このキーの値をYESに設定します
1
Zaldy