0

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

- (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”将被再次调用到下一个问题。至此,Level 完成。

一切都很好。

请帮我保存信息/关卡。如果关卡完成,当用户启动游戏时,他必须从保存的关卡开始。

这是我已经尝试过的:

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

...

}

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

请帮忙。谢谢

4

2 回答 2

1

文档中所述,您不能将原语 (int) 保存到 NSUserDefaults 中。您必须先将 int 转换为 NSNumber,然后才能保存它,方法是执行以下操作:

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

然后,当你重新加载它时,如果你再次需要一个 int ,你可以使用intValue

于 2013-03-05T03:03:11.530 回答
0

在中设置键值后NSUserDefaults,您必须使用该synchronize方法保存它。

[[NSUserDefaults standardUserDefaults] setInteger:currentQuestionIndex forKey:@"currentLevel"];
[[NSUserDefaults standardUserDefaults] synchronize];
于 2013-03-05T03:02:23.323 回答