我需要来自removeAllObjects
的{{1}}。 NSMutableDictionary通过JSON响应填充。在某些情况下,我得到NSMutableDictionary
作为结果。我尝试对NSMutableDictionary执行NSCFDictionary
,但是Dictionary仍然是NSCFDictionary ...
如何解决我的问题并从NSCFDitionary中获取NSMutableDictionary?
mutableCopy
-(void)putImageDetails:(NSMutableDictionary *)json {
NSMutableDictionary *tmp = [json mutableCopy]; // __NSCFDictionary removeAllObjects]: mutating method sent to immutable object'
self.imageDetails = tmp;
}
变量 json和tmp仍然是NSCFDictonary 。在我的理解中,tmp应该是一个NSMutableDitionary ...(参见变量视图)
答案 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];