2009-04-23 8 views
28

J'ai les deux procédures suivantes définies dans mon AppDelegate. saveSettings et loadSettings. J'appelle ma procédure loadSettings dans la méthode AppDidFinishLaunching, et j'appelle la procédure saveSettings dans ma vue de paramètres, une fois que le bouton de sauvegarde est cliqué.iPhone SDK - charger/enregistrer les paramètres

Les deux méthodes semblent être appelées au bon moment, le bon nombre de fois (une fois), et en utilisant les bonnes données. mon objet settings obtient les bonnes données, mais les données ne semblent pas réellement être sauvegardées. Quand je lance le code de chargement, mes variables résultantes reviennent vides (pas nul).

J'ai essayé de mettre le même code de chargement dans une vue différente et cela fonctionne bien, mais pour une raison quelconque, je ne reçois pas de résultats dans mon appDelegate.

Toute aide serait grandement appréciée.

- (void)applicationDidFinishLaunching:(UIApplication *)application {  
     [window addSubview:navigationController.view]; 
     [window makeKeyAndVisible]; 
     [self loadSettings]; 
     [self setDefaults]; 
} 

-(void)loadSettings{ 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    settings.masterLocation = [prefs objectForKey:@"masterLocation"]; 
    settings.masterPort = [prefs objectForKey:@"masterPort"]; 
    settings.userName = [prefs objectForKey:@"userName"]; 
    settings.passWord = [prefs objectForKey:@"passWord"]; 
    settings.autoLogin=[prefs objectForKey:@"autoLogin"]; 

    if (settings.autoLogin == nil) 
     [email protected]"N"; 


} 

-(void)saveSettings:(SharedData *)d{ 
    settings=d; 

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    [prefs setObject:settings.masterLocation forKey:@"masterLocation"]; 
    [prefs setObject:settings.masterPort forKey:@"masterPort"]; 
    [prefs setObject:settings.userName forKey:@"userName"]; 
    [prefs setObject:settings.passWord forKey:@"passWord"]; 
    [prefs setObject:settings.autoLogin forKey:@"autoLogin"]; 
} 

Répondre

29

Doh.

Dans saveSettings, il me manquait [prefs synchronize];

+0

Merci pour l'insigne Autodidacte. – Dutchie432

+0

Merci qui m'a vraiment aidé! – Khattab

+1

"synchronize" au lieu de "syncronize" – Manni

1

pour le rendre échantillon:

//Writing 
[[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"anInt"]; 
[[NSUserDefaults standardUserDefaults] setDouble:1.2 forKey:@"aDouble"]; 
[[NSUserDefaults standardUserDefaults] setString:@"aString" forKey:@"aString"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

//Reading: 

int i = [[NSUserDefaults standardUserDefaults] integerForKey:@"anInt"]