1

アプリにいくつかのユーザー デフォルトを設定しています。

スナップショット ON/OFF 起動時のヒント ON/OFF ゲーム音楽 ON/OFF iPod 音楽 ON/OFF 効果音 ON/OFF 全ドールリセット ON/OFF

アプリが (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.もう一度アプリに戻ると、音楽が再生されなくなりました。

アプリがバックグラウンドにあるときにユーザー設定の更新に問題がある人はいますか??

前もって感謝します - マーク

4

2 に答える 2

2

バックグラウンドから戻った後、キーのオブジェクトを取得する前に、standardUserDefaults の同期を行う必要があることがわかりました。

于 2010-06-24T00:49:23.300 に答える
1

ヒントをありがとう。コードを探している人のために:

- (void)applicationDidBecomeActive:(UIApplication *)application {
[[NSUserDefaults standardUserDefaults] synchronize];
}
于 2011-05-23T08:49:42.813 に答える