我的应用中设置了几个用户默认值:
快照开/关 启动/启动启动提示 游戏音乐开/关 iPod音乐开/关 音效开/关 重置所有玩偶开启/关闭
当我的应用程序进入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.第二次切换回我的应用程序,现在音乐不再播放了。
当app在后台时,其他任何人在更新用户设置时遇到问题吗?
提前致谢 - 马克
答案 0 :(得分:2)
发现从Background返回后,我需要在获取key的对象之前执行standardUserDefaults的同步。
答案 1 :(得分:1)
感谢小费。对于任何寻找代码的人:
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[NSUserDefaults standardUserDefaults] synchronize];
}