2013-07-18 4 views
0

안녕하세요. 최고 기록을 저장하려고합니다. 5 개의 고득점을위한 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'이 아닌가요? 텍스트가 이미 텍스트 필드에 입력 되었습니까? 'hs.text'가'viewDidLoad'의 초기에 약간의 텍스트를 가질 것으로 기대하는 것이 이상하게 보입니다. 텍스트가 없거나 텍스트가 숫자가 아니거나'hs'가'nil'이면'floatValue'가'0'이됩니다. – rmaddy

+0

첫 번째 if 문에 hs.text가 설정됩니다. hs.text == nil을 시도했는데 if 문에 if 문이 들어 가지 않습니다. –

답변

0

문제는 hs.text가 설정되지 않습니다 (또는 당신이 XIB/스토리 보드에 있음을 한 경우 0으로 설정됩니다) viewDidLoad가 호출되는 때이다. 따라서 항상 첫 번째 if 문으로 이동하고 NSUserDefaults에 저장된 값을 사용하지 않습니다.

나는 다음과 같이 텍스트 필드를 설정 제안 : 그것은 finTime 모든 최고 기록을 설정으로

- (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 방법이 제대로 작동하는지 생각하지 않습니다. 각 텍스트 필드의 부동 소수점 값으로 설정하려고합니다.

+0

이것은 작동하지 않습니다. 그 점수를 모든 높은 점수로 설정하십시오. –

+0

NSUserDefaults의 모든 highScore 키를 이미 finTime으로 설정했기 때문입니다. 앱을 제거하고 다시 실행 해보세요. – UpL1nK

+0

아니요. 점수가 새 점수로 바뀔 때마다 점수가 더 좋든 나쁜지 상관없이 –

관련 문제