2010-01-25 5 views
1

Dans mon application, j'utilise un objet NSUserDefaults pour stocker le nom d'utilisateur, le mot de passe et l'URL du serveur dans l'application Paramètres intégrée. S'il n'y a pas de données sauvegardées, l'utilisateur se voit présenter une interface de connexion et lors de la connexion réussie, le nom d'utilisateur et le mot de passe sont sauvegardés. Ensuite, dans mon application, j'ai une vue qui affiche cette information, mais le texte est manquant comme si les données n'ont pas encore été enregistrées dans les paramètres. Voici le code:iphone Paramètres application persist data

... 
NSUserDefaults* appSettings = [NSUserDefaults standardUserDefaults]; 
[appSettings setObject:username forKey:USERNAME]; 
[appSettings setObject:password forKey:PASSWORD]; 

if ([appSettings synchronize]) { 

    // display an alert with a positive message 
} else { 
    // display an alert with a negative message 

} 

Ainsi, après la connexion du message positif est affiché, mais quand je récupérer les données à nouveau, il n'y a rien là, à moins que je redémarre l'application.

Que dois-je faire pour sauvegarder les données immédiatement, ou au moins avant qu'un autre contrôleur de vue ait besoin de lire les paramètres?

Répondre

2

L'objet NSUserDefaults stocke ses données en mémoire et constitue un objet global (pour votre application, de toute façon). Ainsi, tout ce que vous y stockez doit être immédiatement disponible pour tout ce qui tente d'y accéder par la suite. Vous n'avez pas besoin d'appeler synchroniser ici. Si vous n'obtenez pas vos données, vous devez vérifier l'ordre de vos appels pour vous assurer qu'ils sont appelés quand vous pensez qu'ils le sont.

+0

Aha! Donc, je récupère les données de paramètres dans la méthode awakeFromNib dans l'un de mes contrôleurs. Je viens de définir un point d'arrêt dans cette méthode et vu qu'il est appelé immédiatement, je pensais que tout serait appelé lorsque l'utilisateur clique sur l'onglet contenant cette vue particulière. awakeFromNib contient du code étranger qui générait des données statiques, mais je vais le déplacer vers viewDidLoad. Merci Ben! – Lex