App Crashing: Mutating method sent to immutable ob

2020-05-06 00:31发布

I am trying to add an object to an NSMutableArray. Initially I assign some response data to the array, and can display it in a table view. After loading more data, it seems to be crashing when trying to add the new information to my original array.

I am using AFNetworking for this:

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

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

The error I am getting is as follows

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

Can anybody help out with this?

4条回答
Emotional °昔
2楼-- · 2020-05-06 01:04

You need to make the copy of your array. After that you have to modify that array using, [NSMutableArray arrayWithArray: ]

查看更多
Rolldiameter
3楼-- · 2020-05-06 01:12

It sounds like AFNetworking generates immutable objects. You should call -mutableCopy instead of just assigning the result of -objectForKey: directly.

Also are you really intending to have a bunch of nested arrays? It seems like it would make more sense if you added the contents of the response array, rather than the array itself.

查看更多
家丑人穷心不美
4楼-- · 2020-05-06 01:16

Your array is must be mutable array

Use NSMutablearray instead NSArray

查看更多
倾城 Initia
5楼-- · 2020-05-06 01:19

The object you're retrieving from the responseObject dictionary is most likely not an NSMutableArray, but an (immutable) NSArray. You have to create a mutable copy to be able to change it:

//...
if (!_myArray) {
    _myArray = [[responseObject objectForKey:@"data"] mutableCopy];
}
//...
查看更多
登录 后发表回答