web-dev-qa-db-fra.com

ApplicationWillterminate dans iOS 4.0

La méthode de déléguée de l'applicationWillTerminate n'est pas appelée IOS 4.0 lorsque je frappe le bouton de la maison, je constate que les méthodes de déléguement d'applicationsWillResignActive et d'applicationDidyTerbacking sont appelées.

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

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

Et quand je double appuyez sur le bouton de la maison et lancez à nouveau l'application, je trouve que les méthodes de délégué de l'applicationWillentererforeTround et d'applicationsDididbbective sont appelées.

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



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

Mais je veux savoir quand la méthode de délégué de l'applicationWillTerminate sera appelée, où je fais des routines de sauvegarde DB/fichier.

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

}

J'ai même essayé de frapper le signe moins et j'ai supprimé l'application en marche en arrière-plan, mais il n'a pas toujours appelé à une méthode de déléguée.

Des idées ???

36
Biranchi

Du guide de programmation de l'application iPhone:

Même si vous développez votre application à l'aide de l'iPhone SDK 4 et ultérieure, vous devez toujours être préparé pour que votre demande soit terminée. Si la mémoire devient contrainte, le système peut supprimer des applications de la mémoire afin de faire plus de place. Si votre application est actuellement suspendue, le système supprime votre application de la mémoire sans aucun préavis. Toutefois, si votre application est en cours d'exécution en arrière-plan, le système appelle l'applicationWillTerminate: Méthode du délégué de l'application. Votre application ne peut pas demander une heure d'exécution des antécédents supplémentaires à partir de cette méthode.

Donc oui, applicationWillTerminate: ne sera généralement pas appelé très souvent dans iOS 4. Si vous devez enregistrer des données, vous devez le faire dans les deux applicationWillTerminate: et applicationDidEnterBackground:.

52
Ole Begemann

La Session de la WWDC 2010 adoption de multitâches sur iPhone OS ( partie 2 ) explique extrêmement bien les transitions de l'état de l'application.

4
falconcreek

J'ai une solution pour terminer les applications lorsque l'utilisateur frappe le bouton de la maison dans iOS4. Cela appellera la méthode de déléguée d'applicationWillTerminate au lieu d'entrer dans le processus de base.

  1. Ouvrez votre fichier info.plist
  2. Ajouter la clé UIAPLLICATIONEXSUSSUSSUSPEND
  3. Définir la nouvelle clé sur oui
2
Biranchi

En fait, vous pouvez également utiliser cette étape pour le faire.

  1. Ouvrez votre fichier info.plist
  2. Ajouter la clé -> L'application ne fonctionne pas en arrière-plan
  3. Définissez cette valeur de clé sur oui
1
Zaldy