2010-09-24 6 views
4

Pour une raison quelconque, étant donné que le multitâche est arrivé, NSUserDefaults semble ne plus enregistrer les paramètres sur le disque chaque fois que l'application se ferme. Cela se produit: Lorsqu'un paramètre est modifié dans NSUserDefaults et que le bouton d'accueil est enfoncé, l'écran d'accueil devient visible. L'application fonctionne toujours en arrière-plan. Ensuite, je presse deux fois le bouton d'accueil, et retirer l'application du gestionnaire de tâches. App est maintenant vraiment quitter. Ensuite, je tape sur l'icône de l'application pour le lancer à nouveau. Voilla: Les paramètres ne sont pas stockés! mauvais, ancienne valeur!Comment vous assurer que les paramètres NSUserDefaults sont enregistrés sur le disque lorsque l'application se ferme?

Mais quand je fais cela, cela fonctionne: Appuyez sur le bouton d'accueil, appuyez sur l'icône de l'application à nouveau, appuyez sur le bouton d'accueil à nouveau, et appuyez deux fois sur le bouton home et tuez l'application. Appuyez à nouveau sur l'icône. Maintenant, l'application affiche les paramètres corrects.

Je n'ai jamais explicitement enregistré NSUserDefaults, car cela fonctionnait toujours bien. Mais maintenant, iOS semble ne pas être assez intelligent pour le faire automatiquement ... y at-il quelque chose que je peux appeler dans l'une de ces méthodes "app va quitter maintenant" dans le délégué de l'application, de sorte que le dict NSUserDefaults est vraiment sauvé?

Répondre

9

NSUserDefaults modifications sont enregistrées quand il a envoyé un message synchronize:

[[NSUserDefaults standardUserDefaults] synchronize]; 

Le système appelle cela automatiquement que lorsque l'application se termine. Le système l'appelle également toutes les quelques secondes, ce qui explique pourquoi vos paramètres sont enregistrés plus rapidement.

Dans iOS 4, l'application ne se termine pas complètement (alias quitter) si vous la laissez prendre en charge le multitâche. Si vous voulez soutenir multi-tâches de toute façon, et aussi voulez les valeurs par défaut d'un utilisateur pour enregistrer chaque fois que l'application quitte l'avant-plan, vous pouvez appeler le message ci-dessus dans applicationDidEnterBackground: de votre délégué app, comme ceci:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
Questions connexes