2013-07-18 34 views
0

我試圖保存高分,我有5個高分的文本框,我想要在他們遭到毆打時更換它們,顯然。但對我來說,它總是進入if語句:if ([hs.text floatValue] == 0),它只是取代了第一個高分區文本框,無論我運行多少次。我究竟做錯了什麼?保存高分不適用於我

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     highscore = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore"]; 
     highscore1 = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore1"]; 
     highscore2 = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore2"]; 
     highscore3 = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore3"]; 
     highscore4 = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore4"]; 

    if ([hs.text floatValue] == 0) { 
     hs.text = [NSString stringWithFormat:@"%.4f",finTime]; 
    } 
    else if ([hs1.text floatValue] == 0) { 
     hs1.text = [NSString stringWithFormat:@"%.4f",finTime];   
    } 
    else if ([hs2.text floatValue] == 0) { 
     hs2.text = [NSString stringWithFormat:@"%.4f",finTime]; 
    } 
    else if ([hs3.text floatValue] == 0) { 
     hs3.text = [NSString stringWithFormat:@"%.4f",finTime]; 
    } 
    else if ([hs4.text floatValue] == 0) { 
     hs4.text = [NSString stringWithFormat:@"%.4f",finTime]; 
    } 
    else if (finTime < highscore) { 
     hs4.text = hs3.text; 
     hs3.text = hs2.text; 
     hs2.text = hs1.text; 
     hs1.text = hs.text; 
     hs.text = [NSString stringWithFormat:@"%.4f",finTime]; 
    } 
    else if (finTime < highscore1) { 
     hs4.text = hs3.text; 
     hs3.text = hs2.text; 
     hs2.text = hs1.text; 
    } 
    else if (finTime < highscore2) { 
     hs4.text = hs3.text; 
     hs3.text = hs2.text; 
     hs2.text = [NSString stringWithFormat:@"%.4f",finTime]; 
    } 
    else if (finTime < highscore3) { 
     hs4.text = hs3.text; 
     hs3.text = [NSString stringWithFormat:@"%.4f",finTime]; 
    } 
    else if (finTime < highscore4) { 
     hs4.text = [NSString stringWithFormat:@"%.4f",finTime]; 
    } 
    [self saveScore]; 
} 

-(void) saveScore 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setFloat:finTime forKey:@"highScore"]; 
    [defaults setFloat:finTime forKey:@"highScore1"]; 
    [defaults setFloat:finTime forKey:@"highScore2"]; 
    [defaults setFloat:finTime forKey:@"highScore3"]; 
    [defaults setFloat:finTime forKey:@"highScore4"]; 

    [[NSUserDefaults standardUserDefaults] synchronize]; 

} 
+0

你可以包括'hs.text'設置的位置嗎? – bachonk

+0

'hs'不是'nil'?文本已經放入文本字​​段了嗎?在'viewDidLoad'中很早就期望'hs.text'中有一些文本,這似乎很奇怪。如果沒有文本,或者文本不是數字,或者'hs'是'nil',則會得到'floatValue'爲'0'。在第一個if語句中,hs.text被設置爲 – rmaddy

+0

。我試過了hs.text ==零,如果我這樣做,它不會進入if語句 –

回答

0

的問題是,hs.text將不會被設置(或者,如果你做的是,在廈門國際銀行/故事板將被設置爲0)時viewDidLoad被調用。因此,它總是進入第一個if語句,並且不使用存儲在NSUserDefaults中的值。

我建議設置文本字段如下:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    highscore = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore"]; 
    highscore1 = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore1"]; 
    highscore2 = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore2"]; 
    highscore3 = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore3"]; 
    highscore4 = [[NSUserDefaults standardUserDefaults] floatForKey: @"highScore4"]; 

    if (highscore) 
    hs.text = [NSString stringWithFormat:@"%.4f", highscore]; 
    if (highscore1) 
    hs1.text = [NSString stringWithFormat:@"%.4f", highscore1]; 
    if (highscore2) 
    hs2.text = [NSString stringWithFormat:@"%.4f", highscore2]; 
    if (highscore3) 
    hs3.text = [NSString stringWithFormat:@"%.4f", highscore3]; 
    if (highscore4) 
    hs4.text = [NSString stringWithFormat:@"%.4f", highscore4]; 

    ... 

另外,我不認爲saveScore方法是否工作正常,因爲它會將所有的高分,以finTime。您可能希望將它們設置爲來自每個hs文本字段的浮點值。

+0

這是行不通的,它將分數設置爲所有高分 –

+0

這應該是因爲您已經將NSUserDefaults中的所有highScore鍵設置爲finTime。嘗試卸載應用程序並重新運行。 – UpL1nK

+0

不是,因爲每次它用新的替換分數,無論它是好還是壞 –