2012-03-08 13 views
1

私は元々はhereと回答しました。もともと、私は最初の答えを最良のものとしてチェックしましたが、簡単にするために、私はNSUserDefaultsを使用して終了しました。しかし問題は、私がsetObject: forKey:を使用していても、起動時に値を割り当てた後、問題のデフォルト値が変更されていないことです。ここでは、コードです:そこからNSUserDefaultsがデフォルト値を変更しない

//In MenuViewController.m 
- (void)viewDidLoad { 

    NSDictionary* dictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:10] forKey:@"highscore"]; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; 

    NSLog(@"%d", [[[NSUserDefaults standardUserDefaults] objectForKey:@"highscore"] intValue]); 

    //Unrelated code 

} 

、ゲームセッションが実行され、セッションが終わったとき、このコードが実装されていますStatViewControllerで

-(void)timeUp{ 
    statsView= [[StatViewController alloc]initWithNibName:@"StatViewController" bundle:nil]; 
    statsView.score=score; 
    int highScore = [[[NSUserDefaults standardUserDefaults] objectForKey:@"highscore"] intValue]; 
    if (highScore < score) 
    { 
     [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:score] forKey: @"highScore"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
     NSLog(@"%d", [[[NSUserDefaults standardUserDefaults] objectForKey:@"highscore"] intValue]); 
    } 
    highScore = [[NSUserDefaults standardUserDefaults] integerForKey:@"highscore"]; 
} 

そして:

//highScoreLabel is a UILabel that's set up through IB 
highScoreLabel.text = [NSString stringWithFormat:@"%d",[[[NSUserDefaults standardUserDefaults] objectForKey:@"highscore"] intValue]]; 

私はNSUserDefaultsを登録していても同期化を使用していますが、コンソールは常に値10を示しています。私はここで何が間違っていますか?

答えて

2

キーで大文字と小文字が区別されます。

highScoreは常にhighscoreで表示されますが、設定しています。

1
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:score] forKey: @"highScore"]; 

ここでスコアを設定するときは、キー「ハイスコア」を使用します。

キーを読むと、 "最高得点"が使用されます。最初のものを@ "highscore"に変更すれば正常に動作します。

関連する問題