загрузить / сохранить настройки в iOS - PullRequest
28 голосов
/ 23 апреля 2009

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

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

Я попытался поместить тот же код загрузки в другое представление, и он работает нормально, но по какой-то причине я не получаю результаты в моем 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)
        settings.autoLogin=@"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"];   
}

Ответы [ 2 ]

29 голосов
/ 23 апреля 2009

Doh.

В saveSettings мне не хватало моей [prefs синхронизации];

1 голос
/ 30 марта 2013

сделать образец:

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