2013-07-18 33 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

不是,因为每次它用新的替换分数,无论它是好还是坏 –