一部のjSONは、私のアプリが分解するローカルファイルから取得されます:{"1":{"name":"My List","list":[]}}
。
私はこのiOS5.1コードを使用して、利用されているオプションのために、全体を深い可変辞書であると想定するものに変換します。
NSData *data = [[NSFileManager defaultManager] contentsAtPath:jSONFile];
NSMutableDictionary *mydict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
オプションを指定NSJSONReadingMutableContainers
すると、子配列list
は次のカテゴリに分類されると思います。「NSJSONReadingMutableContainers-配列と辞書が可変オブジェクトとして作成されることを指定します。」NSJSONSerializationクラスリファレンスからですが、次のコードを実行しようとすると:
NSMutableArray *myarray = [mydict objectForKey:@"1"] objectForKey:@"list"];
[myarray addObject:@"test"];
次の例外を除いて、実行は2行目(addObject)で爆発します。
-[__ NSArrayI addObject:]:認識されないセレクターがインスタンス0x887e840に送信されました
**キャッチされなかった例外'NSInvalidArgumentException'が原因でアプリを終了しています、理由:'-[__ NSArrayI addObject:]:認識されないセレクターがインスタンス0x887e840に送信されました'
私のSOの調査(1、2、3 )から、上記のエラーは通常、オブジェクトを追加しようとしている要素(辞書/配列)が変更できない場合に発生するようです。さらに、私のSOの調査(1、2 )から、オブジェクトがobj-cで実際に変更可能であるかどうかをテストする方法はないようです。これは、仕様によるものです。
だから私の質問は、私のjSON構造がシリアル化の際(または直後)に実際に「深く」変更可能であることをどのように確認できるかということだと思います。その機能が浅いので使えないmutableCopy
のはわかっています。mydict
任意の方向性/解決策をいただければ幸いです。ありがとうございました。