2010-06-23 38 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]; 
}