关于数组的报错

关于[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object的报错分析 


首先,我们来分析一下这个报错的主要意思

mutating method sent to immutable object

说的是一个不可变的对象使用了可变的方法。

这里面也许很多人会感到奇怪,我数组明明创建的是一个NSMutableArray,为什么突然说我不可变了呢?

原因其实很简单,当一个NSMutavbleArray没有采用addobject来添加元素,而是直接赋值的时候,就会从一个可变数组编译成了不可变数组。

举个例子:

self.tableArr = [NSMutableArrayarrayWithCapacity:0];

self.tableArr = [dic  objectForKey:@"result"];

[self.tableArr   removeAllObjects];

tableArr创建的是一个NSMutableArray可变数组,然后又直接赋值,

这时候其实已经相当于一个NSArray不可变数组了,

然后又走了一个removeAllObjects可变数组的移除元素方法。

所以会导致直接崩溃,出现上面的报错。

解决办法主要有两个:第一就是把self.tableArr =

[dic objectForKey:@"result"]变成

[self.tableArr   addObject:[dicobjectForKey:@"result"]].

第二个就是把[self.tableArr removeAllObjects]

变成self.tableArr

= [NSMutableArrayarrayWithCapacity:0].

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容