键/值更新字符串值

时间:2013-01-31 20:00:34

标签: iphone ios objective-c cocoa-touch key-value

我在使用下面的代码时遇到的问题是,只有在调用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];
 }

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

2 个答案:

答案 0 :(得分:1)

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

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

希望这有帮助

答案 1 :(得分:0)

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

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

firstScore为1 <{1}}是

然后你totalScoreaddOne(1),向它添加一个(2),然后存储在firstScore中,就像这样:

totalScore为1 firstScore是2

再次totalScore,它会显示addOne(1),再添加一个(2)并再次存储,所以没有真正改变。