替换数组中字典中的对象

时间:2014-04-01 21:18:30

标签: ios objective-c arrays nsarray nsdictionary

我的数组结构如下:

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的形式?

对不起,如果这令人困惑,如果您有任何问题,我会尽量澄清。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

如果您正在使用NSJSONSerialization,则可以将NSJSONReadingMutableContainers传递给options的{​​{1}}参数,并且所有已解析的词典和数组都是可变的

+JSONObjectWithData:options:error:

答案 1 :(得分:1)

只需使用NSMutableDictionary类而不只是NSDictionary用于moduleDict变量。解析JSON对象时很容易完成。如果不是 - 创建一个这样的:

NSMutableDictionary *newDict = [NSMutableDictionary dictionaryWithDictionary: moduleDict];

答案 2 :(得分:0)

我怀疑你是否真的在最低级别处理NSMutableDictionary。你有这些印刷报表的输出吗?

通常,JSON反序列化生成的结构是不可变类型。这正是您的错误消息所说的。