2009-04-23 18 views
28

Mam dwie następujące procedury zdefiniowane w moim AppDelegate. saveSettings i loadSettings. Wywołuję moją procedurę loadSettings w metodzie AppDidFinishLaunching i wywołuję procedurę saveSettings w moim widoku ustawień, po kliknięciu przycisku zapisu.iPhone SDK - ustawienia ładowania/zapisywania

Obie metody wydają się być wywoływane we właściwym czasie, odpowiednią liczbę razy (raz) i przy użyciu poprawnych danych. mój obiekt ustawień otrzymuje właściwe dane, ale dane nie wydają się faktycznie zapisywać. Kiedy uruchamiam kod obciążenia, moje zmienne wynikowe wracają puste (nie zero).

Próbowałem umieścić ten sam kod ładowania w innym widoku i działa dobrze, ale z jakiegoś powodu nie otrzymuję wyników w moim appDelegate.

Każda pomoc będzie bardzo ceniona.

- (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"]; 
} 

Odpowiedz

29

Doh.

W saveSettings, brakowało mi [prefs synchronize];

+0

Dzięki za Odznaką Self-ucznia. – Dutchie432

+0

Dzięki, że naprawdę pomogło! – Khattab

+1

"Synchronizuj" zamiast "Synchronizuj" – Manni

1

aby próbka:

//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"]