我在使用下面的代码时遇到的问题是,只有在调用secondViewController中的viewDidLoad方法时,totalScore才会更新。因此,如果我连续两次按下addOne按钮,则两次检索字符串都是相同的,因此它只会将一个添加到相同的现有值,因为它尚未在secondViewController中更新。每次在firstViewController中按下addOne按钮时,如何设置更新secondViewController中的totalScore
firstViewController:
-(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];
}
secondViewController:
-(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];
}
我希望我已经解释了这个问题是可以理解的,所以也许有人可以帮我解决这个问题。
答案 0 :(得分:1)
如果我正确地理解了这一点,那么你在这里犯的错误是因为你的firstViewController中的addOne函数也在更新总分,但是你没有在那里保存总分。所以在firstViewController的saveString函数中,也要添加这一行:
[[NSUserDefaults standardUserDefaults] setObject:myString forKey:@"totalScore"];
希望这有帮助
答案 1 :(得分:0)
您正在使用2个不同的分数,从firstScore
获取值,增加它并将其存储到totalScore
。检查您要在每个中存储的内容。
以下是您的代码失败原因的示例:
firstScore
为1
<{1}}是
然后你totalScore
,addOne
(1),向它添加一个(2),然后存储在firstScore
中,就像这样:
totalScore
为1
firstScore
是2
再次totalScore
,它会显示addOne
(1),再添加一个(2)并再次存储,所以没有真正改变。