J'ai une application (un jeu) qui enregistre des données: l'état du jeu, les meilleurs scores, les réalisations, etc. Actuellement, le délégué de l'application le fait sur applicationWillTerminate:
. Après avoir joué un peu avec l'iPhone 4, il semble que les applications ne se terminent pratiquement jamais: elles tournent à l'arrière-plan pour toujours, à moins que l'utilisateur ne fasse tout son possible pour les quitter ou redémarrer le téléphone. Donc, ma question est, devrais-je trouver un autre endroit pour enregistrer mes données, et si oui, quand?iPhone 4: quand sauvegarder les données?
Répondre
Pour minimiser le temps passé dans l'appel de la méthode déléguée, vous devriez trouver un endroit qui a du sens pour sauvegarder pendant le jeu (niveau d'achèvement, points de contrôle, etc.). Vous pouvez également ajouter une nouvelle méthode déléguée à votre délégué d'application qui sera appelée lorsque votre application passera en arrière-plan, dans laquelle vous pourrez dupliquer certaines des choses que vous avez faites précédemment dans applicationWillTerminate:
. La nouvelle méthode déléguée à implémenter est -applicationDidEnterBackground:
.
Vous recevrez également une notification que l'utilisateur est revenu à votre application en tant que applicationWillEnterForeground:
.
vous pouvez le faire déléguer des vues méthode
- (void) viewDidDisappear: (BOOL) animé
{
// CODE POUR SAUVER
}
Vous devez enregistrer dans applicationDidEnterBackground. Assurez-vous d'envelopper votre code d'enregistrement avec - beginBackgroundTaskWithExpirationHandler: et endBackgroundTask, car sans cela, vous avez moins d'une seconde (ou quelque chose comme ça) avant que l'exécution ne se bloque.
La méthode est applicaitonDidEnterBackground: et votre application est déjà en arrière-plan lorsqu'elle est appelée. En outre, votre application ne sera jamais suspendue pendant l'appel à la méthode applicationDidEnterBackground, seulement après son retour. Cependant, vous n'avez que 5 secondes pour revenir de cette méthode avant que le chien de garde ne se termine. –
Il existe 2 méthodes de déléguer cette appli, vous pouvez utiliser
applicationDidResignActive: //pausing the app, used when a msg comes up. if multitasking this wont help
applicationDidEnterBackground: // called in iOS 4 for when the app is in the background
vous pouvez voir quand il charge au premier plan en utilisant
applicationWillEnterForeground:
départ the reference pour plus d'infos
Merci pour tous les réponses, j'ai fini par faire la plupart des économies (stats, highscores, etc.) quand une partie se termine, ainsi que l'enregistrement de l'état du jeu sur applicationDidEnterBackground. – zpasternack