2015-10-29 86 views
0

我有一个NSMutableDictionary,我想要更改元素的值。更改嵌套的NSMutableDictionary中的值

//My dictionary: 

{ 
    objectId = 8ED998yWd1; 
    cardInfo =  { 
     state = published; //THIS! 
     price = 40; 
     color = red; 
     } 
}; 

我尝试了好几种方法,但价值不会改变,就像这样:

[dictionary setObject:@"reserved" forKey:@"state"]; //nope 

或本:

[dictionary setValue:@"reserved" forKeyPath:@"cardInfo.state"]; //nope 

,或者:

[[dictionary objectForKey:@"cardInfo"] setObject:@"reserved" forKey:@"state"]; //no 

和这个:

[dictionary setObject:@"reserved" forKey:[[dictionary objectForKey:@"cardInfo"] objectForKey:@"state"]]; 

如何将对象“状态”从“发布”更改为“保留”?

谢谢!

+0

如何产生这个'NSMutableDictionary'? JSON?用手? –

+0

内部'cardInfo'字典也是一个可变字典吗? –

+0

我从JSON获取文件。我发现这个问题,在以前的控制器字典中是不可变的。抱歉。 – Vins

回答

1

假设都dictionarycardInfoNSDictionary实例:

你可以得到嵌套字典的可变复制,修改相应的值,并写入修改后的字典回“顶级”的字典,像这样:

NSMutableDictionary *mutableDict = [dictionary mutableCopy]; 
NSMutableDictionary *innerDict = [dictionary[@"cardInfo"] mutableCopy]; 
innerDict[@"state"] = @"reserved"; 
mutableDict[@"cardInfo"] = innerDict; 
dictionary = [mutableDict copy]; 

我想你可能在一条线,但它是一个丑陋的线。

编辑:

如果同时外部和内部字典已经mutable将事情简化了一下,当然:

NSMutableDictionary *innerDict = dictionary[@"cardInfo"]; 
innerDict[@"state"] = @"reserved"; 
dictionary[@"cardInfo"] = innerDict; 
+1

在你最后一段代码中,没有理由重新指定'innerDict'。事实上,如果整件事情已经由可变词典组成,那么你可以'dictionary [@“cardInfo”] [@“state”] = @“reserved”;'。 – rmaddy

+0

你当然是正确的:) – Gamma

+0

谢谢,但我总是有相同类型的日志“[__NSDictionaryI setObject:forKeyedSubscript:]:无法识别的选择器发送到实例0x7f96f947b9c0” – Vins