2011-04-21 27 views
1

我想在程序中保存一些偏好我似乎無法使NSUserDefaults正常工作。如果有人可以看看我的代碼,看看是否有我們將不勝感激有一個NSUserDefault問題

NSString *kGameIsPaused = @"gameGameIsPaused"; 
NSString *kSoundOn = @"gameSoundOn"; 
NSString *kMusicOn = @"gameMusicOn"; 
NSString *kHighScore = @"gameHighScore"; 

- (void)saveGameState 
{ 
[[NSUserDefaults standardUserDefaults] setBool:gameIsPaused forKey:kGameIsPaused]; 
[[NSUserDefaults standardUserDefaults] setBool:soundOn forKey:kSoundOn]; 
[[NSUserDefaults standardUserDefaults] setBool:musicOn forKey:kMusicOn]; 
[[NSUserDefaults standardUserDefaults] setInteger:highScore forKey:kHighScore]; 

} 

-(void)loadGameState 
{ 

gameIsPaused = [[NSUserDefaults standardUserDefaults] boolForKey:kGameIsPaused]; 
soundOn = [[NSUserDefaults standardUserDefaults] boolForKey:kSoundOn]; 
musicOn = [[NSUserDefaults standardUserDefaults] boolForKey:kMusicOn]; 
highScore= [[NSUserDefaults standardUserDefaults] integerForKey:kHighScore]; 

if (soundOn == NO) { 
    [soundToggle setImage:[UIImage imageNamed:@"SoundOFF.png"] forState:UIControlStateNormal]; 
} 

if (musicOn == NO) { 
    [musicToggle setImage:[UIImage imageNamed:@"MusicOff.png"] forState:UIControlStateNormal]; 
} 

} 

他們每次我運行loadGameState方法,如果沒有關鍵參考我得到返回的默認值的任何錯誤。

回答

1

saveGameState內部我建議添加一個同步到默認值來保存它們。如果你的遊戲崩潰了,或者你正在停止調試器或其他任何錯誤,他們可能無法正確保存。

- (void)saveGameState 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setBool:gameIsPaused forKey:kGameIsPaused]; 
    [defaults setBool:soundOn forKey:kSoundOn]; 
    [defaults setBool:musicOn forKey:kMusicOn]; 
    [defaults setInteger:highScore forKey:kHighScore]; 
    [defaults synchronize]; 
}