2010-06-23 8 views
0

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?

+0

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

Répondre

5

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:.

2

vous pouvez le faire déléguer des vues méthode

- (void) viewDidDisappear: (BOOL) animé

{

// CODE POUR SAUVER

}

2

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.

+1

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. –

2

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

+0

didResignActive est également un bon endroit, mais didEnterBackground devrait suffire. – nevyn

+0

Ouais, pense qu'il y en a quelques autres aussi. – Rudiger