如何从NSCFDictionary中创建NSMutableDictionary

时间:2014-02-11 09:59:58

标签: iphone objective-c json nsmutabledictionary

我需要来自removeAllObjects的{​​{1}}。 NSMutableDictionary通过JSON响应填充。在某些情况下,我得到NSMutableDictionary作为结果。我尝试对NSMutableDictionary执行NSCFDictionary,但是Dictionary仍然是NSCFDictionary ...

如何解决我的问题并从NSCFDitionary中获取NSMutableDictionary?

获取JSON并存储

mutableCopy

removeAllObjects并将它们填入新的

-(void)putImageDetails:(NSMutableDictionary *)json {
    NSMutableDictionary *tmp = [json mutableCopy]; // __NSCFDictionary removeAllObjects]: mutating method sent to immutable object'
    self.imageDetails = tmp;
}

这里是调试输出

使用NSMutableDictionary

的正常工作案例

Normal working case with NSMutableDictionary

尝试将NSCFDictonary转换为NSMutableDictionary,但它不起作用

变量 json和tmp仍然是NSCFDictonary 。在我的理解中,tmp应该是一个NSMutableDitionary ...(参见变量视图)

Try to Tansform a NSCFDictonary to NSMutableDictionary but it does not work

这将导致错误:__ NSCFDictionary removeAllObjects:mutating方法发送到不可变对象

Still an NSCFDictionary

2 个答案:

答案 0 :(得分:2)

您应该使用NSJSONSerialization +JSONObjectWithData:options:error:从JSON数据中获取字典。它需要options参数,您应将其设置为NSJSONReadingMutableContainers,以便JSON中创建的数组和字典都是可变的。

您当前的代码正在使self.imageDetails成为一个可变字典(尽管它的内容都不可能是可变的),但是您试图改变self.detailData。目前尚不清楚这些2是如何相关的,但您应该在创建时设置数据结构的可变性(从JSON反序列化)。

答案 1 :(得分:0)

您要添加NSCFDictonary个对象,不要将NSCFDictonary分配给NSMutableDictionary,请执行以下操作,

NSData *data =[jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError * error=nil;
NSDictionary *responseJSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:responseJSON];