2009-04-23 2 views
28

У меня есть следующие две процедуры, определенные в приложении AppDelegate. saveSettings и loadSettings. Я вызываю свою процедуру loadSettings в методе AppDidFinishLaunching, и я вызываю процедуру saveSettings в моем представлении настроек после нажатия кнопки сохранения.iPhone SDK - загрузка/сохранение настроек

Оба метода, кажется, вызываются в нужное время, правильное количество раз (один раз) и использование правильных данных. мой объект настроек получает правильные данные, но данные, похоже, фактически не сохраняются. Когда я запускаю код загрузки, мои результирующие переменные возвращаются пустым (не ноль).

Я попытался поместить тот же код загрузки в другое представление, и он отлично работает, но по какой-то причине я не получаю результаты в своем приложении appDelegate.

Любая помощь была бы принята с благодарностью.

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

ответ

29

Doh.

В saveSettings мне не хватало [prefs synchronize];

+0

Спасибо за Self-Learner Знак. – Dutchie432

+0

Спасибо, что очень помогли! – Khattab

+1

«синхронизировать» вместо «syncronize» – Manni

1

, чтобы сделать его образец:

//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"] 
Смежные вопросы