私は元々は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を示しています。私はここで何が間違っていますか?