2013-03-05 4 views
0

Создаю викторину. Вот часть моего кода:Сохранить данные с помощью NSUserDefaults

- (void) viewDidLoad 
{ 
logos = [[NSMutableArray alloc] init]; 
[logos addObject:@"adidas"]; 
[logos addObject:@"nike"]; 
[logos addObject:@"puma"]; 

[self showLogo]; 
} 

int currentQuestionIndex; 

- (void) showLogo 
{ 

currentQuestionIndex++; 

NSString *question = [logos objectAtIndex:currentQuestionIndex]; 

[_questionImage setImage:[UIImage imageNamed:question]]; 

... 

} 

Если пользователь выберет правильный ответ, «showLogo» будет называться снова, чтобы перейти к следующему вопросу. Итак, уровень завершен.

Все работает отлично.

Пожалуйста, помогите мне сохранить информацию/уровни. Уровень IF завершен, когда пользователь запускает игру, он должен начать с сохраненного уровня.

Это то, что я уже пробовал:

- (void) checkAnswer 
{ 

///... if user answered right 

[[NSUserDefaults standardUserDefaults] setInteger:currentQuestionIndex forKey:@"currentLevel"]; 

[self showLogo]; 
/// so, I tried to save "currentQuestionIndex" forKey currentLevel, and call "showLogo" 
} 

и здесь модифицирована «showLogo»

- (void) showLogo 
{ 

int savedLevel = [[NSUserDefaults standardUserDefaults] integerForKey:@"currentLevel"]; 

currentQuestionIndex = savedLevel+1 ; 

NSString *question = [logos objectAtIndex:currentQuestionIndex]; 

[_questionImage setImage:[UIImage imageNamed:question]]; 

... 

} 

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

Помогите пожалуйста. Спасибо

ответ

0

После установки значения ключа в NSUserDefaults, вы должны сохранить его с помощью метода synchronize.

[[NSUserDefaults standardUserDefaults] setInteger:currentQuestionIndex forKey:@"currentLevel"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
1

Как указано в documentation, вы не можете сохранить примитивную (INT) в NSUserDefaults. Вы должны превратить ИНТ в NSNumber, прежде чем вы можете сохранить его, делая что-то вроде этого:

NSNumber *questionIndex = [[NSNumber alloc] numberWithInt:currentQuestionIndex]; 

Затем, когда вы загрузите его обратно, если вам нужно Int вы снова можете использовать intValue

+0

Я попробовал код в своем ответе, и он работает. – tolgamorf

+0

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