1

以下についてご協力いただきありがとうございます。

次のJSONデータを読み込んでいます。

(
    {
    name = Facilities;
    versiondate = "1972-01-01";
},
    {
    name = Services;
    versiondate = "1972-01-01";
},
    {
    name = ThingsToDo;
    versiondate = "1972-01-01";
}
)

次のコードに:

NSMutableDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:updateData options:kNilOptions error:&errorString];

次に、ディクショナリを繰り返し処理し、バージョン日付を今日の日付に変更しようとしています。私はこれをしようとして2時間以上費やしました...そして運がありません!私はMutableCopiesなども理解しようと戦っています。私はこれで比較的新しいです...

だから、私は次のことを試みています:

for (NSMutableDictionary *item in dictionary)
{
    NSMutableDictionary *newdict = [item mutableCopy];
    NSLog(@"I have item as: %@",newdict);
    NSLog(@"I have the date as: %@", [newdict objectForKey:@"versiondate"]);
    [newdict setObject:[NSDate date] forKey:@"versiondate"];
    NSLog(@"I now have the date as: %@", [newdict objectForKey:@"versiondate"]);
    NSLog(@"I have item as: %@",newdict);
    item = newdict;
}

NSLog(@"New Dictionary now becomes: %@", dictionary);

そしてNSLogのものを無視して、私は運がありません。バージョン日付を今日の日付に変更して、バージョン日付ごとに保存しようとしています。はぁ。

私の「明らかな」エラーがどこにあるかを教えてくれる助けをいただければ幸いです。アイテムをNSMutableDictionaryとして宣言しています...では、なぜnewdictを定義する必要があるのですか?値を更新したら、これを元の辞書に「保存」するにはどうすればよいですか?

4

2 に答える 2

2

JSON を逆シリアル化するときに変更可能な辞書と配列が必要な場合は、オプションを渡しますNSJSONReadingMutableContainers。それ以外の場合、出てくるものは可変ではありません。そして、それをそのように扱うと、NSInternalInconsistencyExceptionあなたが見ているものになります。

表示されているコードのように、サブ辞書の変更可能なコピーを作成できますが、元の最上位コンテナーの内容は変更されません。(そして、ループの最後でコピーを元の変数に代入しても、まったく何も達成されません。)

于 2012-09-27T04:09:16.117 に答える
1

行で:

NSMutableDictionary *newdict = [item mutableCopy];

のコピーを作成し、そのコピーをitem修正しています。代わりに、item直接変更してください:

[item setObject:[NSDate date] forKey:@"versiondate"];

あなたが何をしようとしているのかはわかりますがitem = newdict、それはローカルポインターが指すオブジェクトを変更するだけで、 の実際のアイテムitemは変更しません。dictionary

于 2012-09-27T04:04:08.753 に答える