发送到不可变对象的变异方法
Posted
技术标签:
【中文标题】发送到不可变对象的变异方法【英文标题】:Mutating method sent to immutable object 【发布时间】:2011-08-03 22:46:56 【问题描述】:我正在使用 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
对象的类在头文件中定义。无论我将其声明为什么(NSArray
、NSMutableArray
、NSDictionary
或 NSMutableDictionary
),运行代码时都会出现相同的错误(它编译得很好),即:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[JKDictionary setObject:forKey:]: mutating method sent to immutable object'
谁能告诉我这个对象是什么类型的,我应该怎么做才能将 Base64 解码的图像添加到对象中?
我对 Objective-C 还很陌生,所以请耐心等待。谢谢。
【问题讨论】:
【参考方案1】:您正在尝试改变不可变的 JKDictionary
(它本身就是不可变的 NSDictionary
对象的代理)。
您链接到的文档在 NSString
上指定了一个名为 - (id)mutableObjectFromJSONString;
的实例方法,这将为您提供一个可变字典对象,如果您愿意,可以使用它。
【讨论】:
非常感谢!像魅力一样工作。以上是关于发送到不可变对象的变异方法的主要内容,如果未能解决你的问题,请参考以下文章
尽管对象是 NSMutableDictionary,但“发送到不可变对象的变异方法”