1

当我使用下面的代码时,我遇到的问题是 totalScore 仅在调用 secondViewController 中的 viewDidLoad 方法时才会更新。因此,如果我连续按两次 addOne 按钮,则两次检索字符串都是相同的,因此它只会将一个添加到相同的现有值,因为它尚未在 secondViewController 中更新。每次在 firstViewController 中按下 addOne 按钮时,我如何设法更新 secondViewController 中的 totalScore

第一视图控制器:


-(void)saveString:(NSString *)myString {
[[NSUserDefaults standardUserDefaults] setObject:myString forKey:@"firstScore"];
}

-(NSString *)retrieveString {
NSString *recoveredString = [[NSUserDefaults standardUserDefaults]objectForKey:@"totalScore"];
return recoveredString;
}

-(IBAction) addOne {
    NSString *totalScore = [self retrieveString];
    NSInteger totalScoreInt = [totalScore intValue];

    NSInteger newScore = totalScoreInt+1;
    NSString *newScoreString = [NSString stringWithFormat:@"%i", newScore];
    [self saveString:newScoreString];

}


第二个视图控制器:


-(void)saveString:(NSString *)myString {
[[NSUserDefaults standardUserDefaults] setObject:myString forKey:@"totalScore"];
}

-(NSString *)retrieveString {
NSString *recoveredString = [[NSUserDefaults     standardUserDefaults]objectForKey:@"firstScore"];
return recoveredString;
}

-(void) viewDidLoad {
    NSString *firstScore = [self retrieveString];
    NSInteger firstScoreInt = [firstScore intValue];

    NSInteger newTotalScore = firstScoreInt+1;
    NSString *newTotalScoreString = [NSString stringWithFormat:@"%i", newTotalScore];
    [self saveString:newTotalScoreString];
 }

我希望我已经解释了可以理解的问题,所以也许有人可以帮助我。

4

2 回答 2

1

如果我理解正确,你在这里犯的错误是因为你的 firstViewController 中的 addOne 函数也在更新总分,但你没有在那里保存总分。因此,在 firstViewController 中的 saveString 函数中,也添加这一行:

[[NSUserDefaults standardUserDefaults] setObject:myString forKey:@"totalScore"];

希望这可以帮助

于 2013-01-31T20:47:33.383 回答
0

您正在使用 2 个不同的分数,从 中获取值firstScore,增加它并将其存储到totalScore. 检查您要在每个中存储的内容。

这是您的代码失败的原因的示例:

firstScore是 1 totalScore是什么

然后你addOne,它取firstScore(1),向它添加一个(2),并存储在 中totalScore,这样它就变成了这样:

firstScore是 1 totalScore是 2

再次读取,addOne它读取firstScore(1),添加一 (2) 并再次存储,所以没有真正改变。

于 2013-01-31T20:11:13.173 回答