1

我有如下代码。我正在从 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:]: mutating method sent to immutable object”

现在,我没有得到的是,我正在尝试setValue:forKey在 dataDict 中,它是实例化NSMutableDictionary的,所以我应该能够设置值。

4

2 回答 2

4

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

for (NSDictionary *dict in JSON) {

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

}
于 2012-04-12T11:46:11.453 回答
1

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

你实际上是在处理 simple NSDictionary,所以你不能修改它。如果您需要修改它,只需调用mutableCopy它。这将使您成为对象的所有者,因此,如果您不使用 ARC,请记住在完成后释放它。

于 2012-04-12T11:45:59.033 回答