一些 JSON 来自我的应用程序分解的本地文件:{"1":{"name":"My List","list":[]}}
.
由于使用了以下选项,我使用此 iOS 5.1 代码将整个内容转换为我认为是深度可变字典的内容:
NSData *data = [[NSFileManager defaultManager] contentsAtPath:jSONFile];
NSMutableDictionary *mydict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
给定选项NSJSONReadingMutableContainers
,我会假设子数组list
属于此类:“NSJSONReadingMutableContainers - 指定数组和字典被创建为可变对象。” 来自NSJSONSerialization Class Reference,但是当我尝试执行以下代码时:
NSMutableArray *myarray = [mydict objectForKey:@"1"] objectForKey:@"list"];
[myarray addObject:@"test"];
执行在第二行(addObject)爆炸,但有以下例外:
-[__NSArrayI addObject:]: 无法识别的选择器发送到实例 0x887e840
** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayI addObject:]:无法识别的选择器已发送到实例 0x887e840”
根据我的 SO 研究(1、2、3),似乎上述错误通常是在尝试添加对象的元素(字典/数组)不可变时引起的。此外,根据我的 SO 研究(1、2),似乎没有办法测试对象在 obj-c 中是否确实是可变的,这是设计使然。
所以我想我的问题是,如何确保我的 JSON 结构在序列化时(或之后立即)确实是“深度”可变的?我知道我不能使用mutableCopy
onmydict
因为那个功能很浅。任何方向/解决方案将不胜感激。谢谢你。