Pourquoi NSUserDefaults ne sauvegarde-t-il pas mes valeurs?

Bonjour, j’essaie d’utiliser NSUserDefaults pour enregistrer certaines valeurs par défaut dans la firebase database. Je suis capable de sauvegarder les valeurs dans NSUserDefaults (même vérifié dans NSLog ). Maintenant, j’ai besoin des valeurs dans délégué d’application lorsque l’application est redémarrée. Mais je ne reçois rien dans les NSUserDefaults . Voici mon code de ma classe où je sauvegarde les valeurs dans NSUserDefaults :

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

Voici mon code de App Delegagte:

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSLog(@"%@",[prefs valueForKey:@"dict"]); 

le code ci-dessus me renvoie toujours null. Quelqu’un peut-il m’aider s’il vous plaît?

Si vous mettez fin à votre application en appuyant sur le bouton d’accueil (dans le simulateur ou sur l’appareil), vos NSUserDefaults seront enregistrés.

Si vous terminez votre application en appuyant sur “Stop” dans Xcode (dans le simulateur ou sur le périphérique), vos NSUserDefaults peuvent être enregistrés, mais il y a de fortes chances qu’ils ne le soient pas. NSUserDefaults persiste toutes les modifications périodiquement et si vous terminez le processus avant qu’elles ne soient persistantes, elles disparaîtront. Vous pouvez forcer la sauvegarde en appelant:

 [[NSUserDefaults standardUserDefaults] synchronize]; 

Addenda:

Dans iOS4 (cette réponse a été écrite à l’origine lorsque iOS3 était la version publique), vos NSUserDefaults risquent de ne pas être enregistrés lorsque vous appuyez sur le bouton d’accueil. L’appel manuel de [[NSUserDefaults standardUserDefaults] synchronize] dans applicationDidEnterBackground: devrait s’assurer que vos NSUserDefaults sont correctement enregistrés (cela devrait vraiment être un comportement IMO intégré).

Ce code fonctionne bien pour moi.

 NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; if (standardUserDefaults) { [standardUserDefaults setObject:mySsortingng forKey:@"Prefs"]; [standardUserDefaults synchronize]; } 

Vous n’avez pas dit 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 depuis Xcode. Les préférences ne seront préservées que si vous relancez depuis le simulateur lui-même.

Dans mon cas, je sauvegardais et récupérais une chaîne. Lorsque je me suis synchronisé après la sauvegarde et que je suis revenu dans un autre thread, cela ne fonctionnait pas correctement. Le problème a été résolu en synchronisant à la fois après la sauvegarde et avant la récupération.