2013-01-31 49 views
1

我在使用下面的代碼時遇到的問題是,只有在調用secondViewController中的viewDidLoad方法時,纔會更新totalScore。因此,如果我連續兩次按下addOne按鈕,retrieveingString同時都是相同的,所以它只會將一個添加到相同的現有值,因爲它沒有在secondViewController中更新。如何管理每個addOne按鈕被firstViewController鍵/值更新字符串值

firstViewController按時間來更新totalScore在secondViewController:


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

我希望我已經解釋了這個問題是可以理解的,所以也許有人可以幫我解決這個問題。

回答

1

如果我正確地理解了這一點,那麼你在這裏所犯的錯誤是,因爲你的firstViewController中的addOne函數也在更新總分數,但是你並沒有在那裏保存總分數。所以,在你的firstViewController功能saveString,加入這一行太:

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

希望這有助於

+0

就是這樣!非常感謝! – Peter

0

您正在使用2個不同的分數,取值爲firstScore,將其增加並存入totalScore。檢查你試圖存儲在每個。

這就是爲什麼你的代碼失敗的例子:

firstScore爲1 totalScore是什麼

那麼你addOne,這需要firstScore(1),增加了一個它(2),並將其存儲在totalScore,這使這樣的:

firstScore是1 totalScore是2

addOne再次,它讀取firstScore(1),添加一(2)並再次存儲,所以沒有真正改變。

+0

我知道我在做什麼在這裏,我試圖解釋這正是我的問題,但你也許有一個建議該怎麼辦? – Peter