我创建了一个问答游戏。这是我的代码的一部分:
- (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 :(得分:1)
如documentation中所述,您无法将原语(int)保存到NSUserDefaults中。你必须把你的int变成一个NSNumber才能保存它,通过这样做:
NSNumber *questionIndex = [[NSNumber alloc] numberWithInt:currentQuestionIndex];
然后,当你加载它时,如果你再次需要一个int,你可以使用intValue
答案 1 :(得分:0)
在NSUserDefaults
中设置键值后,您必须使用synchronize
方法保存它。
[[NSUserDefaults standardUserDefaults] setInteger:currentQuestionIndex forKey:@"currentLevel"];
[[NSUserDefaults standardUserDefaults] synchronize];