0

iOS のユーザー デフォルトでこのオブジェクトを再編集できないようです。これが私のコードです...

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:nil forKey:@"savedScoreCards2"];

これを行う前は、savedScoreCards キーを巨大な 3-d 辞書に設定していましたが、今はそれを上書きしようとしたり、キーを nil に設定しようとしても、少し前に設定した巨大な 3-d 辞書がまだ残っています。私はそれを上書きしたり置き換えたりすることはできないようです (nil)、または別の巨大な 3-d 辞書。何か案は?

アップデート:

  + (void)saveCurrentScoreCard 
  {
    //save score card
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSMutableDictionary *savedScoreCards = [[NSMutableDictionary alloc] init];
    [userDefaults setObject:nil forKey:@"savedScoreCards2"];//reset at beginning

    NSMutableArray *golferOneScoresu = [userDefaults arrayForKey:@"golferOneScoresArray"];
    NSMutableArray *golferTwoScoresu = [userDefaults arrayForKey:@"golferTwoScoresArray"];
    NSMutableDictionary *golferIconsu = [userDefaults objectForKey:@"golferIconsFirstScene"];
    NSMutableArray *golferThreeScoresu = [userDefaults arrayForKey:@"golferThreeScoresArray"];
    NSMutableArray *golferFourScoresu = [userDefaults arrayForKey:@"golferFourScoresArray"];
    NSMutableDictionary *golferIcons2u = [userDefaults objectForKey:@"golferIcons"];
    NSMutableArray *golferNamesu = [userDefaults objectForKey:@"golferNames"];

    NSMutableArray *golferNames = [[NSMutableArray alloc] initWithArray:golferNamesu copyItems:YES];
    NSMutableDictionary *golferIconsSceneOne = [[NSMutableDictionary alloc]initWithDictionary:golferIconsu];
    NSMutableDictionary *golferIcons = [[NSMutableDictionary alloc]initWithDictionary:golferIcons2u];
    NSMutableArray *golferFourScores = [[NSMutableArray alloc] initWithArray:golferFourScoresu copyItems:YES];
    NSMutableArray *golferThreeScores = [[NSMutableArray alloc] initWithArray:golferThreeScoresu copyItems:YES];
    NSMutableArray *golferOneScores = [[NSMutableArray alloc] initWithArray:golferOneScoresu copyItems:YES];
    NSMutableArray *golferTwoScores = [[NSMutableArray alloc] initWithArray:golferTwoScoresu copyItems:YES];

    NSMutableDictionary *currentScoreCard = [[NSMutableDictionary alloc] init];

    [currentScoreCard setObject:golferNames forKey:@"golferNames"];
    [currentScoreCard setObject:golferIconsSceneOne forKey:@"golferIconsFirstScene"];
    [currentScoreCard setObject:golferIcons forKey:@"golferIcons"];
    [currentScoreCard setObject:golferOneScores forKey:@"golferOneScoresArray"];
    [currentScoreCard setObject:golferTwoScores forKey:@"golferTwoScoresArray"];
    [currentScoreCard setObject:golferThreeScores forKey:@"golferThreeScoresArray"];
    [currentScoreCard setObject:golferFourScores forKey:@"golferFourScoresArray"];

    [savedScoreCards setObject:currentScoreCard forKey:@"1"];

    NSLog([golferIconsSceneOne objectForKey:@"30101"]);

    [userDefaults setObject:savedScoreCards forKey:@"savedScoreCards2"];
    [userDefaults synchronize];
    NSLog(@"SAVED SCORE CARD");
}
4

2 に答える 2

3

[userDefaults removeObjectForKey:@"savedScoreCards2"]保存された値を削除しようとしているだけの場合に使用します。また[userDefaults synchronize];、変更をすぐに「フラッシュ」するように呼び出します。私[userDefaults synchronize]はおそらくあなたが見逃しているものだと思います。

于 2012-05-19T00:57:58.423 に答える
1

NSUserDefaultsに変更を加えても、NSUserDefaultsは自動的に保存されません。上に投稿した行の下に次の行を追加してみてください。

[userDefaults synchronize];

これにより、行った変更がすべて保存されます。

ちなみに、「nil」をNSUserDefaultsに保存できるかどうかはわかりません。基本的には、nil値を設定できない辞書だと思います。したがって、代わりに空のオブジェクトを設定してみてください。

これがお役に立てば幸いです。さらに情報が必要な場合はお知らせください。

于 2012-05-19T00:58:26.530 に答える