Mutating方法发送到不可变对象

时间:2011-08-03 22:46:57

标签: ios json parsing class-method

我正在使用JSONKit来解析我的iPhone应用程序中从我的服务器返回的JSON字符串。服务器响应的一部分是一些Base64编码的图像,我想将其解码为实际图像并添加到解析器创建的对象中。问题是我似乎无法弄清楚解析器返回什么类的类,因此可以使用哪种方法与对象进行交互。我已经在JSONKit documentation搜索了我的问题的答案,但还没有找到答案。

decodedData = [[request responseString] objectFromJSONString];

int i = 0;
[Base64 initialize];
for (NSString *base64String in [decodedData valueForKey:@"base64String"]) {
    UIImage *image = [UIImage imageWithData:[Base64 decode:base64String]];
    [decodedData setValue:image forKey:@"image"];
    i++;
}

此代码放在一个方法中,该方法在请求成功完成后调用,并在[request responseString](JSON)中返回响应。 decodedData对象的类在头文件中定义。无论我将其声明为(NSArrayNSMutableArrayNSDictionaryNSMutableDictionary),我都会在运行代码时遇到相同的错误(编译得很好) ,这是:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[JKDictionary setObject:forKey:]: mutating method sent to immutable object'

有人可以告诉我这个对象是什么类,以及我应该怎么做才能将Base64解码后的图像添加到对象中?

我对Objective-C很新,所以请耐心等待。感谢。

1 个答案:

答案 0 :(得分:9)

您正在尝试改变不可变JKDictionary(本身是不可变NSDictionary对象的代理)。

您链接到的文档指定名为NSString的{​​{1}}上的实例方法,如果您愿意,这将为您提供可以使用的可变字典对象。