ApplicationWillTerminate в iOS 4.0 - PullRequest
       47

ApplicationWillTerminate в iOS 4.0

36 голосов
/ 29 июня 2010

Метод делегата applicationWillTerminate не вызывается в iOS 4.0 Когда я нажимаю кнопку «Домой», я вижу вызываемые методы делегата 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, где я выполняю некоторые процедуры резервного копирования БД / файла.

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

}

Я даже попытался нажать знак минус и удалил приложение, работающее в фоновом режиме, но все равно оно не вызывало какой-либо метод делегата.

Любые идеи ???

Ответы [ 4 ]

52 голосов
/ 29 июня 2010

Из Руководства по программированию приложений iPhone:

Даже если вы разрабатываете свое приложение с использованием iPhone SDK 4 и более поздних версий, вы все равно должны быть готовы к тому, что ваше приложение будет прекращено. Если память становится ограниченной, система может удалить приложения из памяти, чтобы освободить место. Если ваше приложение в настоящий момент приостановлено, система удаляет ваше приложение из памяти без какого-либо уведомления. Однако, если ваше приложение работает в фоновом режиме, система вызывает метод applicationWillTerminate: делегата приложения. Ваше приложение не может запросить дополнительное время фонового выполнения из этого метода.

Так что да, applicationWillTerminate: обычно не будет вызываться очень часто в iOS 4. Если вам нужно сохранить данные, вы должны делать это как в applicationWillTerminate:, так и applicationDidEnterBackground:.

4 голосов
/ 29 июня 2010

Сессия WWDC 2010 Принятие многозадачности на iPhone OS ( Часть 2 ) очень хорошо объясняет переходы состояния приложения.

2 голосов
/ 03 июля 2010

У меня есть одно решение для завершения приложений, когда пользователь нажимает кнопку «Домой» в iOS4.Это вызовет метод делегата applicationWillTerminate вместо входа в фоновый процесс.

  1. Откройте файл info.plist
  2. Добавить ключ UIApplicationExitsOnSuspend
  3. Установите для нового ключа значениеДА
1 голос
/ 28 апреля 2011

На самом деле вы также можете использовать этот шаг для этого.

  1. Откройте файл info.plist
  2. Добавить ключ -> Приложение не работает в фоновом режиме
  3. Установите значение этого ключа на ДА
...