一部のjSONは、私のアプリが分解するローカルファイルから来ます:{"1":{"name":"My List","list":[]}}
。深刻な変更可能なシリアル化されたiOSの辞書/配列
私が原因利用オプションに、私は深い可変辞書であることを前提とするものに全体の事を変換するために、このiOSの5.1のコードを使用します。
私がいることを前提としますオプションNSJSONReadingMutableContainers
を考えると
NSData *data = [[NSFileManager defaultManager] contentsAtPath:jSONFile];
NSMutableDictionary *mydict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
子配列list
はこのカテゴリに入ります: "NSJSONReadingMutableContainers - 配列と辞書が可変オブジェクトとして作成されることを指定します。" [__ NSArrayIのaddObject:] -
:未認識セレクタに送られ、次の例外を除いて、第二行(のaddObject)に
NSMutableArray *myarray = [mydict objectForKey:@"1"] objectForKey:@"list"];
[myarray addObject:@"test"];
実行爆発:NSJSONSerialization Class Reference、私は、次のコードを実行しようとするからインスタンス0x887e840
**キャッチされない例外により 'NSInvalidArgumentException'、理由にアプリを終了: - 私のSOの研究から
を '[__ NSArrayIのaddObject::]認識されていないセレクタは、インスタンス0x887e840に送られました' (1,2,3)、オブジェクトを追加しようとしている要素(辞書/配列)がでなく、が可変である場合、上記のエラーが一般的に発生するようです。さらに、私のSOの研究(1、2)から、obj-cでオブジェクトが実際に変更可能かどうかをテストする方法がないように思われます。これは設計によるものです。
私の質問は、どうすれば私のjSON構造が真にシリアル化時(または直後)に「深い」変更可能であることを保証できますか?私はmydict
にmutableCopy
を使用できないことを知っています。その機能は浅いからです。どんな方向/解決策も非常に高く評価されるだろう。ありがとうございました。私は可変深いコピーを行うにはNSDictionaryの上のカテゴリを使用してこの実装を使用して素晴らしい作品ている
かなりいいです。私の辞書は配列を含む辞書を含んでいるので少し修正しなければならなかった。 –
@AuthmanApatira辞書に辞書で動作するコードを投稿できますか?ありがとう! –