应用程序崩溃:发送到不可变对象的变异方法
Posted
技术标签:
【中文标题】应用程序崩溃:发送到不可变对象的变异方法【英文标题】:App Crashing: Mutating method sent to immutable object 【发布时间】:2014-04-05 16:13:05 【问题描述】:我正在尝试将对象添加到 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'
有人可以帮忙吗?
【问题讨论】:
【参考方案1】:您从responseObject
字典中检索的对象很可能不是NSMutableArray
,而是(不可变的)NSArray
。您必须创建一个可变副本才能对其进行更改:
//...
if (!_myArray)
_myArray = [[responseObject objectForKey:@"data"] mutableCopy];
//...
【讨论】:
【参考方案2】:听起来 AFNetworking 生成不可变对象。您应该调用-mutableCopy
而不是直接分配-objectForKey:
的结果。
你真的打算拥有一堆嵌套数组吗?如果您添加响应数组的内容而不是数组本身,似乎会更有意义。
【讨论】:
【参考方案3】:您需要制作数组的副本。之后,您必须使用 [NSMutableArray arrayWithArray: ]
修改该数组
【讨论】:
【参考方案4】:你的数组必须是可变数组
使用 NSMutablearray 代替 NSArray
【讨论】:
以上是关于应用程序崩溃:发送到不可变对象的变异方法的主要内容,如果未能解决你的问题,请参考以下文章