App Crashing: Mutating method sent to immutable object

耗尽温柔 提交于 2019-12-02 19:19:35

问题


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?


回答1:


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];
}
//...



回答2:


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.




回答3:


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




回答4:


Your array is must be mutable array

Use NSMutablearray instead NSArray



来源:https://stackoverflow.com/questions/22883388/app-crashing-mutating-method-sent-to-immutable-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!