作者chen0404 (没有昵称)
看板MacDev
标题Re: [问题] json 修改问题
时间Thu Apr 17 18:10:19 2014
谢谢你的回答 目前我从server收到的资料为(id)data
NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithDictionary:
[data mutableCopy]];
然後照着你的方式去改值 dict[@"A"][@"1"][@"c"]=@"DD";
会有error [__NSCFDictionary setObject:forKey:]: mutating method sent
to immutable object'
原本以为是宣告的问题但如果我用我po的方法 直接宣告到最底层(1)在去改值(2)却不
会有error,请问知道原因吗?
谢谢
ps.(1)NSMutableDictionary *dict1 = [[[NSMutableDictionary alloc]initWithDictio
nary [[dict objectForKey:@"A"] objectForKey:@"1"]]mutableCopy];
(2)[dict1 setObject:"DD" forKey:@"c"];
※ 引述《kokuyoku (Daniel)》之铭言:
: 从server收到的资料直接放到NSMutableDictionary *dict1进行修改
: 然後再用你原本打的方法就可以了
: 例:dict1[@"A"][@"1"][@"c"]=@"DD";
: 用以上的方法就可以不用特别再用一个dict取资料再存入
: ※ 引述《chen0404 (没有昵称)》之铭言:
: : 您好, 我从server 收到一个json格式如下
: : {
: : -A:{
: : 1:{
: : a:"aa",
: : b:"bb",
: : c:"cc"
: : }
: : 2:{
: : .....
: : }
: : 3:{
: : ....
: : }
: : }
: : -B:{
: : ....
: : }
: : }
: : 假设我如果想修改key:c 的value:"cc" 要如何修改
: : 目前的直觉是
: : NSMutableDictionary *dict = [[[NSMutableDictionary alloc]initWithDictionary:
: : [[dict1 objectForKey:@"A"] objectForKey:@"1"]]mutableCopy];
: : [dict setObject:"DD" forKey:@"c"];
: : dict修改完後如何放回dict1呢?
: : 谢谢您的解答
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.227.181.61
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/MacDev/M.1397729422.A.B6F.html
1F:→ howdiun:用NSJSONSerialization + NSJSONReadingMutableContainers 04/17 18:25
2F:→ whitefur:因为dictionary的copy是shallow copy 04/17 20:22
3F:→ whitefur:你的NSMutableDictionary的entry可以随意remove/add 04/17 20:24
4F:→ whitefur:但是它的下一层的dictionary仍然是NSDictionary 04/17 20:25
谢谢楼上各位的解释, 目前方法已经解决, 小弟说明一下问题及解决方法,
我是用afnetworking来截取sever传来的JSON, 但afnetworking似乎就如同whitefur所说
shallow copy,如果要能够修改value的话必须用NSJSONReadingMutableContainers
这样子的话再用NSMutableDictionary去deep copy afnetworking传来的JSON
就可以去更改value了
这是stackoverflow的解答:
http://stackoverflow.com/questions/19998735/afnetworking-2-0-mutable-json
※ 编辑: chen0404 (125.227.181.61), 04/18/2014 11:42:30