我的数组结构如下:
NSMutableArray topArray{
NSMutableArray middleArray{
NSMutableArray lowerArray{
NSMutableDictionary dict{
}
}
}
}
数组结构中填充了一些我从Web检索的数据是JSON格式。
我正在尝试编辑NSMutableDictionary中的一个对象,如下所示:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableArray *lowerArray = [[self middleArray] objectAtIndex:[indexPath section]];
NSMutableDictionary *dict = [lowerArray objectAtIndex:[indexPath row]];
[dict setObject:[NSNumber numberWithInt:1] forKey:@"key"];
[[self tableView] reloadData];
}
每个数组中的数据是正确的(我已经检查过print语句),但是,当我尝试更改dict中的对象时,我收到以下错误: 理由:
' - [__ NSCFDictionary setObject:forKey:]:发送的mutating方法 不可变对象'
我需要在数组结构中更改字典中的对象。
这可能是JSON数据的一个问题,因为当topArray首次使用JSON数据初始化时,中间和下面的数组只是NSArray的形式?
对不起,如果这令人困惑,如果您有任何问题,我会尽量澄清。
提前感谢您的帮助。
答案 0 :(得分:2)
如果您正在使用NSJSONSerialization
,则可以将NSJSONReadingMutableContainers
传递给options
的{{1}}参数,并且所有已解析的词典和数组都是可变的
+JSONObjectWithData:options:error:
答案 1 :(得分:1)
只需使用NSMutableDictionary
类而不只是NSDictionary
用于moduleDict
变量。解析JSON对象时很容易完成。如果不是 - 创建一个这样的:
NSMutableDictionary *newDict = [NSMutableDictionary dictionaryWithDictionary: moduleDict];
答案 2 :(得分:0)
我怀疑你是否真的在最低级别处理NSMutableDictionary。你有这些印刷报表的输出吗?
通常,JSON反序列化生成的结构是不可变类型。这正是您的错误消息所说的。