2010-07-14 7 views
1

Mon application utilise NSUserDefaults pour stocker certaines valeurs afin de pouvoir les restaurer à la mise à jour de l'application ou si l'arrière-plan est fermé. L'arrière-plan enregistre automatiquement mes valeurs entières, mais si l'utilisateur quitte l'application à partir du lanceur, les nombres sont également perdus, et la méthode ViewDidUnload ne s'impose pas lorsque j'entre en arrière-plan. Est-il possible que je puisse enregistrer le NSUserDefaults chaque fois que l'application est déchargée. En outre, la méthode ViewDidLoad a rencontré le même problème, elle ne provoque pas d'arrière-plan. Quel est le moyen de contourner cela?Comment savoir si l'application iPhone a été lancée en arrière-plan ou non

P.S. Jusqu'à présent, les seules données que mon application doit sauvegarder sont un int pour un compte à l'écran.

MISE À JOUR: UIApplicationDidEnterBackgroundingNotification fonctionne très bien avec vos suggestions!

+0

Merci les gars! Je suis juste étonné. J'aime Stack Overflow, je n'ai jamais été nulle part ailleurs où vous pouvez obtenir cette aide si pertinente et si rapidement. – SeniorShizzle

Répondre

1

Vous ne pouvez pas enregistrer les données juste avant qu'elles ne soient finalement détruites, mais vous pouvez enregistrer l'état 'au cas où' dans votre délégué applicationDidEnterBackground:. Il y a aussi applicationDidBecomeActive :, mais il n'y a aucune raison de charger vos données de sauvegarde à partir de là, car lorsqu'elles sont appelées à partir d'une application qui était en arrière-plan, les données auront été conservées de toute façon.

+0

Il y a aussi une notification pour DidEnterBackground si vous ne voulez pas la logique dans le délégué de l'application. – drawnonward

+0

Ok, alors vous me demandez d'invoquer NSUserDefaults sur applicationDidEnterBackground: à chaque fois, et seulement les mises à jour par défaut sur viewDidLoad? Génie! – SeniorShizzle

1

Vous ne pouvez pas savoir si votre application a été lancée depuis l'arrière-plan ou non, au moins comment elle est actuellement configurée, car votre délégué d'application recevra la même séquence d'événements s'il est lancé depuis le tremplin. Comme le dit Joost, vous devez enregistrer tout ce dont vous avez besoin pour restaurer l'état dans le rappel applicationDidEnterBackground; Essentiellement, vous devriez supposer que c'est le dernier message que votre application recevra avant qu'elle ne soit tuée sans pitié par un faucheur de processus diabolique.

Vous devriez consulter le WWDC 2010 Session Videos, en particulier, Session 105 - Adopter multitâche sur iPhone OS, partie 1 pour une explication approfondie.

+0

Merci pour la suggestion de vidéo de session! J'adore ces vidéos et je vais y jeter un coup d'œil :) – SeniorShizzle

Questions connexes