使用NSUserDefaults保存数据

时间:2013-03-05 02:30:29

标签: objective-c

我创建了一个问答游戏。这是我的代码的一部分:

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

...

}

但不起作用..使用这种方法,我试图保存得分,它也有效..

请帮助。感谢

2 个答案:

答案 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];