Comment préserver l'état de l'application iPhone avant de mettre fin à l'application?

StackOverflow https://stackoverflow.com/questions/1811696

Question

J'ai développé une application iPhone avec barre de navigation et contrôleurs de navigation.

Cela fonctionne bien pour l'instant.

Je souhaite maintenant que l'application enregistre son état avant de quitter.

Supposons que je dispose de 6 onglets et que si un appel entrant arrive, donc, après avoir relancé l'application, je devrais voir l'onglet sélectionné qui avait été sélectionné en dernier.

J'ai vu plusieurs questions sur ce sujet mais je suis plus confus après les avoir vues,

quelqu'un peut-il me dire un moyen simple de faire cela?

Était-ce utile?

La solution

Il n’existe pas de solution unique, la réponse exacte à cette question - la mise en œuvre de la sauvegarde de l’état de l’application dépendra énormément de la structure de celle-ci, de sorte que toute solution unique ne conviendra probablement pas à votre cas particulier.

Certains conseils et indications d'ordre général devraient toutefois vous mettre sur la bonne voie pour développer une solution de préservation de l'état:

  1. Vous souhaiterez généralement effectuer des opérations pour enregistrer l'état dans applicationWillTerminate: dans votre délégué d'application ou en écoutant UIApplicationWillTerminateNotification dans d'autres classes.

  2. Consultez NSUserDefaults. Vous pouvez utiliser NSUserDefaults pour stocker la clé / paires de valeurs (similaires à un NSDictionary, bien que vous ne puissiez stocker que les objets qui implémentent le NSCoding dans NSUserDefaults) relatives aux préférences ou à d'autres informations. Utilisez NSUserDefaults pour stocker des informations d'état. Une mise en garde - vous ne devriez pas utiliser NSUserDefaults pour stocker de grandes quantités de données, car cela ralentirait le lancement de votre application (puisque les valeurs sont chargées au lancement).

  3. Plus spécifique à votre cas ... si tout ce que vous voulez faire est de conserver l'onglet sélectionné entre les applications, vous devez implémenter applicationWillTerminate: et utiliser NSUserDefaults pour stocker l'index de tabulation sélectionné. Ensuite, dans votre implémentation applicationDidFinishLaunching: , vous vérifierez l'existence de cette clé NSUserDefaults et définissez l'index sélectionné par UITabBarController sur la valeur stockée, le cas échéant.

  4. Si vous souhaitez également pouvoir restaurer, par exemple, la pile de navigation de l'onglet sélectionné, vous devez stocker suffisamment d'informations pour que la pile de navigation puisse être reconstruite avec précision. Les informations que vous devez stocker dans NSUserDefaults sont difficiles à quantifier de manière générale car elles sont très spécifiques à la structure de votre application et aux itérations possibles de la hiérarchie du contrôleur de vue dans la pile de navigation.

  5. Si vous devez restaurer une pile de navigation plus générale, y compris des données utilisateur éventuellement saisies que vous ne voulez pas perdre lors de la fermeture de l'application (par exemple, si l'utilisateur crée un nouvel enregistrement ), Je vous suggérerais de vous concentrer sur le stockage de l'état de l'application au niveau des délégués de l'application et de vous concentrer sur le fait que vos classes de contrôleur de vue écoutent UIApplicationWillTerminateNotification et fassent leur propre sauvegarde d'état spécifique. Vous devrez également déterminer un mécanisme d'utilisation des informations enregistrées par le contrôleur de vue à la fermeture pour restaurer la hiérarchie de navigation. C'est une technique plus complexe qui peut ne pas être nécessaire selon vos besoins.

Malheureusement, cette réponse est un peu nébuleuse, en particulier pour les cas plus généraux et complexes, car, comme je l’ai indiqué, il n’existe pas de solution générale à cette question car elle dépend tellement de la structure de votre application.

Voici un exemple d'utilisation de NSUserDefaults: http://robertcarlsen.net/2009/06/19/overly-simplistic-saving-state-in-of-for-iphone-847

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top