2010-06-23 65 views
1

我在我的應用程序設置多個用戶的默認值:加載用戶默認值4.0

花絮ON/OFF 啓動提示ON/OFF 遊戲音樂ON/OFF 的iPod音樂ON/OFF 音效ON/OFF 重置所有娃娃ON/OFF

當我的應用程序進入backgound(在OS 4.0),我saveDefaults:方法從applicationWillResignActive叫:(UIApplication的*)方法。

然後在applicationWillEnterForeground:方法中,我再次加載我的用戶默認值。然後我調用一個啓動MenuMusic的方法。

使用相當簡單的保存默認的方法,應該工作:

- (void)saveGameDefaults { 

[[NSUserDefaults standardUserDefaults] setObject:(NSString *)myDoll.currentDoll forKey:@"DollName"]; 
[[NSUserDefaults standardUserDefaults] setInteger:[gameState intValue] forKey:@"GameState"]; 
[[NSUserDefaults standardUserDefaults] setInteger:[startScreen intValue] forKey:@"StartScreen"]; 
[[NSUserDefaults standardUserDefaults] setBool:snapShots forKey:@"SnapShots"]; 
[[NSUserDefaults standardUserDefaults] setBool:resetDolls forKey:@"Reset"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 


} 

這裏是我的負載的默認方法的一小部分:

{ 
    if ([[NSUserDefaults standardUserDefaults] objectForKey:@"GameState"] == nil) gameState = [NSNumber numberWithInt:MENU_VIEW]; 
else gameState = [[NSUserDefaults standardUserDefaults] objectForKey:@"GameState"]; 


if ([[NSUserDefaults standardUserDefaults] objectForKey:@"StartScreen"] == nil) startScreen = [NSNumber numberWithInt:SHOW_START_SCREEN]; 
else startScreen = [[NSUserDefaults standardUserDefaults] objectForKey:@"StartScreen"]; 



if ([[NSUserDefaults standardUserDefaults] objectForKey:@"GameSound"] == nil) gameSound = [NSNumber numberWithInt:SOUNDS_ON]; 
else gameSound = [[NSUserDefaults standardUserDefaults] objectForKey:@"GameSound"]; 
} 

好像,不更新默認設置或當它從後臺返回時可用於應用程序。我通過直接切換到iPhone設置,更改設置,然後通過雙擊主屏幕按鈕並選擇我的應用程序直接切換回到後臺。但是,如果我再次退出並重新進入,它將讀取已設置的新設置。

例如: 1.我啓用了音樂,然後啓動應用程序。音樂正在菜單中播放。 2.我雙擊主頁按鈕並選擇我的設置應用程序&將菜單音樂設置更改爲NO。 3.雙擊主頁按鈕並切換回遊戲。音樂仍在播放。 4.再次雙擊房屋並返回設置應用程序。菜單音樂仍然設置爲NO。 5.第二次切換回我的應用程序,現在音樂不再播放。

其他任何人在應用程序在後臺時更新用戶設置有問題?

預先感謝馬克 -

回答

2

發現,從後臺返回後,我需要得到對象鍵之前做standardUserDefaults的同步。

1

感謝您的提示。對於任何尋找代碼的人:

- (void)applicationDidBecomeActive:(UIApplication *)application { 
[[NSUserDefaults standardUserDefaults] synchronize]; 
}