App Crashing:发送到不可变对象的Mutating方法

时间:2014-04-05 16:13:06

标签: ios objective-c json cocoa-touch nsmutablearray

我正在尝试将对象添加到NSMutableArray。最初我将一些响应数据分配给数组,并可以在表视图中显示它。加载更多数据后,尝试将新信息添加到原始数组时似乎崩溃了。

我正在使用AFNetworking:

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    if(!_myArray){
        _myArray = [responseObject objectForKey:@"data"];
    }
    else{
        [_myArray addObject:[responseObject objectForKey:@"data"]];
    }
    [self.tableView reloadData];
}

我得到的错误如下

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

有人可以帮帮忙吗?

4 个答案:

答案 0 :(得分:2)

您从responseObject词典中检索的对象很可能不是NSMutableArray,而是(不可变的)NSArray。您必须创建一个可变副本才能更改它:

//...
if (!_myArray) {
    _myArray = [[responseObject objectForKey:@"data"] mutableCopy];
}
//...

答案 1 :(得分:1)

听起来AFNetworking会生成不可变对象。您应该致电-mutableCopy,而不是直接分配-objectForKey:的结果。

你真的打算拥有一堆嵌套数组吗?如果添加响应数组的内容而不是数组本身,似乎更有意义。

答案 2 :(得分:1)

您需要制作阵列的副本。之后,您必须使用[NSMutableArray arrayWithArray: ]

修改该数组

答案 3 :(得分:-1)

你的数组必须是可变数组

使用NSMutablearray代替NSArray