NSUserDefaults не сохраняет - PullRequest
       14

NSUserDefaults не сохраняет

1 голос
/ 19 мая 2010

Я пытаюсь сохранить некоторую информацию в приложении для iphone / ipad. Проблема в том, что это работает, но если я закрою приложение (с помощью кнопки home на симуляторе или закрою с помощью cmd + q), информация будет потеряна!

это мой код (и, если видите, я использовал "syncronize")

- (IBAction)choose1{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"choose1" forKey:@"choose"];
    [defaults synchronize]; 
}

- (IBAction)choose2{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"choose2" forKey:@"choose"];
    [defaults synchronize];
}

- (IBAction)openview{
    NSString *var = [[NSUserDefaults standardUserDefaults] objectForKey:@"choose"];
    if (var == @"choose1"){
        [self pushViewController:view1 animated:YES];}
    else if (var == @"choose2"){
        [self pushViewController:view2 animated:YES];
    }

}

Я не понимаю, почему: (

Ответы [ 3 ]

2 голосов
/ 19 мая 2010

При сравнении строк вы должны использовать метод isEqualToString, то есть:

if ([var isEqualToString:@"choose1"]){

В противном случае вы сравниваете реальные объекты, а не их содержимое.

1 голос
/ 19 мая 2010

Я не совсем уверен, но, возможно, он сохраняет ваши значения по умолчанию, и ошибка находится в другом месте. Я думаю о вашем методе "openView":

- (IBAction)openview{
NSString *var = [[NSUserDefaults standardUserDefaults] objectForKey:@"choose"];
if (var == @"choose1"){
    [self pushViewController:view1 animated:YES];}
/** you are comparing to "choose1" here as well. **/
else if (var == @"choose1"){
    [self pushViewController:view2 animated:YES];
}

Другая возможность может заключаться в том, что вы никогда не вызываете методы choose1 () или choose2 ()? Это объясняет, почему значение никогда не изменяется.

Несмотря на эти 2 возможности, я думаю, что нет ошибки в коде, который вы используете для изменения пользовательских настроек.

Надеюсь, это поможет.

С уважением,

Gjallar

0 голосов
/ 19 мая 2010

ах, извините: я итальянец, поэтому я использовал слово «выбирать» с итальянским переводом «scelta». Здесь я перевел на английский язык и написал «Choose1», но в своем коде я использовал «Choose2» (или «Scelta2»: P)

для другой возможности (что я никогда не вызывал функцию choose1 () или choose2 ()) ... нет, я звонил, конечно!

...