2010-06-29 4 views
36

La méthode du délégué applicationWillTerminate n'est pas appelée dans iOS 4.0 Lorsque j'appuie sur le bouton Accueil, les méthodes de délégué applicationWillResignActive et applicationDidEnterBackground sont appelées.ApplicationWillTerminate dans iOS 4.0

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

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

Et quand j'Appuyez deux fois sur le bouton Home et lancer à nouveau l'application i trouver les méthodes déléguées applicationWillEnterForeground et applicationDidBecomeActive sont appelés se.

- (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é applicationWillTerminate sera appelé, où je fais quelques routines de sauvegarde DB/fichier.

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

} 

J'ai essayé même de frapper le signe moins et supprimé le fonctionnement App dans l'arrière-plan, mais il n'a présenté aucune méthode déléguée.

Des idées?

+0

Vous avez effectivement mis un code dans 'applicationWillTerminate: ', n'est-ce pas? Votre question montre actuellement un corps de méthode vide. – BoltClock

+0

[ici] (http: // stackoverflow.com/questions/7818045/applicationwillterminate-when-is-it-called-and-when-not) est la solution que j'ai trouvé jusqu'à présent – swiftBoy

Répondre

52

du guide de programmation d'applications iPhone:

Même si vous développez votre application à l'aide du SDK iPhone 4 et versions ultérieures, vous devez toujours être prêt pour que votre demande soit mis fin. Si la mémoire devient limitée, le système peut supprimer des applications de la mémoire afin de libérer de l'espace. 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 la méthode applicationWillTerminate: du délégué de l'application. Votre application ne peut pas demander d'heure d'exécution d'arrière-plan supplémentaire à partir de cette méthode.

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

+5

Autour de la minute 22 de la vidéo citée par falconcreek, il est dit que seul le fond des applications en cours d'exécution tué via l'icône rouge moins obtenir l'avantage d'une applicationWillTerminate: appel avant d'être tué. Suspendus meurent tout de suite. Il est répertorié sous "Résiliation" et n'est pas rendu 100% clair, mais il semble que cela s'applique à la terminaison du système et à la terminaison initiée par l'utilisateur via le signe moins. –

+0

En cours d'exécution iOS 4 sur un iPhone 3G, il semble que applicationWillTerminate: est appelé après applicationDidEnterBackground: lorsque le bouton d'accueil est enfoncé. –

+3

@David: eh bien, l'iPhone 3G ne supporte pas le multitâche donc cela aurait du sens. –

2

J'ai une solution pour terminer les applications lorsque l'utilisateur appuie sur le bouton Accueil dans iOS4. Cela appellera la méthode de délégué applicationWillTerminate au lieu d'entrer dans le processus d'arrière-plan.

  1. Ouvrez votre fichier Info.plist
  2. Ajoutez la clé UIApplicationExitsOnSuspend
  3. Réglez la nouvelle clé YES
+4

Cela quittera immédiatement votre application au lieu de simplement la suspendre. Ainsi, lorsque l'utilisateur relance l'application, il doit recommencer à zéro, ce qui élimine le bénéfice d'une commutation rapide des applications. En général, l'utilisation de UIApplicationExitsOnSuspend est déconseillée, sauf si votre application doit vraiment quitter (http://tinyurl.com/2fgkf5p). – Brian

+0

@Brian: Il n'y a aucune raison de déconseiller ce comportement s'il correspond le mieux aux besoins de votre application et de votre base d'utilisateurs, sans quoi l'existence de la fonctionnalité serait inutile. – ninehundredt

+0

@lakehousetech, vous n'avez pas à me croire sur parole. Le Guide de programmation des applications iOS indique que «Désactiver l'exécution en arrière-plan est fortement déconseillé mais peut être l'option préférée dans certaines conditions. Ce qui est à peu près ce que j'ai dit :-). Le guide indique également que les applications qui démarrent à froid devraient restaurer leur état antérieur, de sorte qu'une résiliation immédiate est rarement nécessaire. – Brian

1

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

  1. Ouvrez votre fichier Info.plist
  2. Ajoutez la clé -> application ne fonctionne pas en arrière-plan
  3. Définissez cette valeur clé OUI
Questions connexes