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

}
4

1 に答える 1

0

問題は、が呼び出されhs.textたときに設定されない (または xib/ストーリーボードで設定した場合は 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また、すべてのハイスコアを に設定するため、メソッドが適切に機能しているとは思いませんfinTimehsおそらく、それぞれのテキスト フィールドから float 値を設定したいと思うでしょう。

于 2013-07-18T15:38:09.153 に答える