繁体   English   中英

NSMutableDictionary中的setValue forKey崩溃

[英]setValue forKey in NSMutableDictionary crashes

我有下面的代码。 我正在从Web服务器检索JSON。

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
                                     {    

                                         for (NSMutableDictionary * dataDict in JSON) {


                                             if ([dataDict objectForKey:@"userPicture"])
                                             {

                                                objectForKey:@"userPicture"]);
                                                 NSURL *url = [NSURL URLWithString:[dataDict objectForKey:@"userPicture"]];
                                                 UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];     


                                                 [dataDict setValue:@"userPicture"
                                                             forKey:@"userPicture"]; 


                                             } 


                                             [messageList addObject: dataDict];
                                         }                                             

                                         [self processComplete];

                                     } 
                                    failure:^(NSURLRequest *request , NSURLResponse *response , NSError *error , id JSON)
                                     {
                                         NSLog(@"Failed: %@", error);        

                                     }];

但是,它崩溃并显示以下错误:

***由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“-[__ NSCFDictionary setObject:forKey:]:发送给不可变对象的变异方法”

现在,我不明白的是,我正在尝试实例化NSMutableDictionary dataDict中的setValue:forKey ,因此我应该能够setValue。

您已经将dataDict声明为NSMutableDictionary,但这并不意味着您从JSON中获得了可变的字典。 您可以做的是要么指示JSON序列化程序获取可变副本(如果它支持此选项),要么手动执行以下操作:

for (NSDictionary *dict in JSON) {

    NSMutableDictionary * dataDict = [dict mutableCopy];
    // Rest of the code here...

}

dataDict只是一个指针,没有实例化。

实际上,您正在处理简单的NSDictionary ,因此无法对其进行修改。 如果需要修改它,只需对其调用mutableCopy 这将使您成为对象的所有者,因此,如果您不使用ARC,请记住在完成操作后将其释放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM