52 votes

Pourquoi NSUserDefaults n'enregistre-t-il pas mes valeurs?

salut, je suis en train d'utiliser nsuser par défaut pour enregistrer certaines valeurs par défaut dans la base de données. Je suis en mesure de sauvegarder les valeurs dans la nsuserdefault(même vérifié dans nslog). Maintenant j'ai besoin de les valeurs dans délégué d'application lorsque l'application est redémarrée. Mais je ne suis pas arriver à quelque chose dans le nsuserdefault. Voici mon code de ma classe où j'ai enregistrer les valeurs dans nsuserdefault:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

            [prefs setObject:appDel.dictProfile forKey:@"dict"];
            NSLog(@"%@",[prefs valueForKey:@"dict"]);

Voici mon code à partir de l'App Delegagte:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

NSLog(@"%@",[prefs valueForKey:@"dict"]);

le code ci-dessus toujours me renvoie null. Certains ont une, merci de m'aider

204voto

Nick Forge Points 13758

Si vous résiliez votre application en appuyant sur le bouton home (dans le Simulateur ou sur l'appareil), l'Utilisateur par Défaut seront enregistrés.

Si vous résiliez votre application en appuyant sur la touche "Stop" dans Xcode (dans le Simulateur ou sur l'appareil), l'Utilisateur par Défaut peut être sauvé, mais il ya une bonne chance qu'ils ne le feront pas. NSUserDefaults persiste tout change régulièrement, et si vous terminez le processus avant qu'ils ont été conservées, elles ne serai plus là. Vous pouvez forcer l'enregistrer en appelant:

[[NSUserDefaults standardUserDefaults] synchronize];



Addendum:

En iOS4 (cette réponse a été écrit à l'origine lors de la iOS3 était la version publique), votre Utilisateur par Défaut ne peuvent pas être sauvés lors de l'appui sur le bouton home. Manuellement appelant [[NSUserDefaults standardUserDefaults] synchronize] en applicationDidEnterBackground: devraient veiller à ce que votre Utilisateur par Défaut sont enregistrés correctement (ce qui devrait vraiment être intégré dans le comportement de l'OMI).

11voto

Kannan Prasad Points 111

Ce code fonctionne bien pour moi.

 NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:myString forKey:@"Prefs"];
    [standardUserDefaults synchronize];
}
 

2voto

Claus Broch Points 7733

Vous n'avez pas indiqué si vous exécutez sur un périphérique ou dans le simulateur, mais si vous redémarrez l'application dans le simulateur, toutes les préférences seront réinitialisées entre les lancements si vous lancez à partir de Xcode. Les préférences ne seront préservées que si vous relancez à partir du simulateur lui-même.

1voto

user2394901 Points 126

Dans mon cas je me sauver et récupérer une chaîne. Quand j’ai synchronisé après l’enregistrement et puis extraire dans un autre thread, il ne fonctionnait pas correctement. Le problème a été résolu en synchronisant fois après l’enregistrement et à l’avant lors de l’extraction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X