appeler exit (0) dans l'application iphone

À un moment donné dans mon application, j'ai fait cette exit(0) qui bloque mon application. Mais je n'ai pas compris quelle méthode est appelée quand cela s'exécute.

J'ai mis des messages dans:

 (void)applicationWillTerminate:(UIApplication *)application (void)applicationDidEnterBackground:(UIApplication *)application 

Mais rien de tout cela ne semble s'appeler! Une idée sur la méthode appelée quand la exit(0) est terminée?

Des lignes direcsortingces de l'user humain d'Apple …

Ne quittez pas le programme

Ne quittez jamais une application iOS par programmation car les gens ont tendance à interpréter cela comme un plantage. Cependant, si des circonstances externes empêchent votre application de fonctionner comme prévu, vous devez informer vos users de la situation et leur expliquer ce qu'ils peuvent y faire. En fonction de la gravité du dysfonctionnement de l'application, vous avez deux choix.

Afficher un écran attrayant qui décrit le problème et suggère une correction. Un écran fournit des commentaires qui rassurent les users qu'il n'y a rien de mal avec votre application. Il permet aux users de prendre le contrôle, les laissant décider s'ils veulent prendre des mesures correctives et continuer à utiliser votre application ou appuyer sur le button Accueil et ouvrir une application différente

Si seulement certaines des fonctionnalités de votre application ne fonctionnent pas, affichez un écran ou une alerte lorsque les users activent la fonctionnalité. Afficher l'alerte uniquement lorsque les users tentent d'accéder à la fonctionnalité qui ne fonctionne pas.

Si vous avez décidé de quitter le programme de toute façon …

En C, exit(0) arrêtera l'exécution de l'application. Cela signifie qu'aucune méthode de délégué ou gestionnaire d'exception ne sera appelé. Donc, si le but est de s'assurer que du code est appelé lors de la fermeture, même en cas de fermeture forcée, il peut y avoir une autre option. Dans votre application AppDelegate une méthode personnalisée appelée quelque chose comme -(void)applicaitonIsgoingAway . Appelez cette méthode à partir de l'endroit où vous voulez que votre code soit appelé:

  1. applicationWillTerminate
  2. applicaitonDidEnterBackground
  3. onUncaughtException

Les deux premiers sont ceux que vous avez déjà mentionnés dans votre question. Le troisième peut être un fourre-tout. C'est un gestionnaire d'exception global. Ce qui suit vient d'une question sur ce même sujet .

Ce gestionnaire d'exceptions sera appelé pour toutes les exceptions non gérées (ce qui provoquerait le blocage de votre application). Depuis ce gestionnaire, vous pouvez appeler applicaitonIsgoingAway , comme dans les 2 autres cas. De l'autre question que j'ai mentionnée ci-dessus, vous pouvez find une réponse semblable à ceci.

 void onUncaughtException(NSException* exception) { [[AppDelegate sharedInstance] applicationIsgoingAway]; } 

Mais pour que cela fonctionne, vous devez définir cette méthode comme gestionnaire d'exception comme ça …

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSSetUncaughtExceptionHandler(&onUncaughtException); //There may already be more code in this method. } 

Maintenant, vous pouvez quitter l'application par programmation en appelant NSAssert(FALSE, @"Quitting the app programmatically."); Tant qu'il n'y a pas d'autre gestionnaire d'exceptions en place pour l'attraper, votre application va commencer à se bloquer et votre code de gestionnaire d'exception sera appelé. À son tour, il appelle l' applicationIsGoingAway .

Lorsque vous appelez exit(0) vous fermez immédiatement votre application. 0 est un code d'état qui signifie une terminaison réussie.

Aucune autre méthode n'est appelée, votre application meurt juste.

Les pommes vous déconseillent d'appeler la sortie n'importe où.

exit(0) est une fonction C qui met fin au process de votre application. Par conséquent, aucune des methods des delegates d'application ne sera appelée, l'application sera immédiatement supprimée. Apple recommand fortement de ne pas quitter votre application, car elle semble être cassée pour l'user.

Il n'existe aucune méthode prise en charge par Apple pour terminer votre application par programme. L'appel à la exit est certainement hors de question. Cela provoque toutes sortes de bogues (par exemple, le mélangeur multitâche se cassera mal) tout en étant simplement faux.

Si vous essayez de désactiver le multitâche, vous pouvez le faire avec la key UIApplicationExitsOnSuspend dans votre file Info.plist (le titre de la key est "L'application ne s'exécute pas en arrière-plan").

Autre que cela, c'est à vos users d'appuyer sur le button d'accueil pour fermer votre application.

ces methods seront appelées, mais vous ne pouvez pas utiliser exit (0), vous devrez appuyer sur le button de return pour fermer votre application, puis ces methods seront appelées