2010-05-18 2 views
1

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

это мой код (и, если вы видите, я использовал «Синхронизировать»)

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

} 

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

+1

Сравнение 'NSString' выполняется с помощью' [var isEqualToString: @ "choose1"] '! – bddckr

ответ

2

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

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

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

+0

Если вы не используете isEqualToString, тогда вы сравниваете указатели на объекты, а не на фактические объекты. – progrmr

+0

YESSSSSSSSSSSSSSSSSSSSSSSS! : D решено !!!! спасибо человеку !!!! действительно!!! – JAA

+0

Добро пожаловать, и да, прогрр прав с его исправлением. –

1

Я не совсем уверен, но, возможно, это . сохранения по умолчанию и ошибка находится где-то еще, что я имею в виду ваш «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]; 
} 

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

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

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

С уважением,

Gjallar

0

ах, я прошу прощения: я итальянский, так что я использовал слово «выбор» с переводом на итальянский язык «scelta». Здесь я переводил на английском языке, и я написал «choose1», но в моем коде я использовал «select2» (или «scelta2»: P)

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

+0

Не отвечайте на свой вопрос, чтобы предоставить дополнительную информацию таким образом. Измените свой вопрос. –

+0

есть. Спасибо!! :) – JAA

Смежные вопросы