可变数组的不可变操作
2016-08-29 15:56
134 查看
-[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object' 有时会报这个错误
首先,我们来分析一下这个报错的主要意思
mutating method sent to immutable object
说的是一个不可变的对象使用了可变的方法。
这里面也许很多人会感到奇怪,我数组明明创建的是一个NSMutableArray,为什么突然说我不可变了呢?
原因其实很简单,当一个NSMutavbleArray没有采用addobject来添加元素,而是直接赋值的时候,就会从一个可变数组编译成了不可变数组。
举个例子:
self.tableArr = [NSMutableArrayarrayWithCapacity:0];
self.tableArr = [dicobjectForKey:@"result"];
[self.tableArrremoveAllObjects];
tableArr创建的是一个NSMutableArray可变数组,然后又直接赋值,
这时候其实已经相当于一个NSArray不可变数组了,
然后又走了一个removeAllObjects可变数组的移除元素方法。
所以会导致直接崩溃,出现上面的报错。
解决办法主要有两个:第一就是把self.tableArr =
[dic objectForKey:@"result"]变成
[self.tableArraddObject:[dicobjectForKey:@"result"]].
第二个就是把[self.tableArr removeAllObjects]
变成self.tableArr
= [NSMutableArrayarrayWithCapacity:0].
转载请注明出处http://blog.csdn.net/u013263917/article/details/22053039。谢谢
首先,我们来分析一下这个报错的主要意思
mutating method sent to immutable object
说的是一个不可变的对象使用了可变的方法。
这里面也许很多人会感到奇怪,我数组明明创建的是一个NSMutableArray,为什么突然说我不可变了呢?
原因其实很简单,当一个NSMutavbleArray没有采用addobject来添加元素,而是直接赋值的时候,就会从一个可变数组编译成了不可变数组。
举个例子:
self.tableArr = [NSMutableArrayarrayWithCapacity:0];
self.tableArr = [dicobjectForKey:@"result"];
[self.tableArrremoveAllObjects];
tableArr创建的是一个NSMutableArray可变数组,然后又直接赋值,
这时候其实已经相当于一个NSArray不可变数组了,
然后又走了一个removeAllObjects可变数组的移除元素方法。
所以会导致直接崩溃,出现上面的报错。
解决办法主要有两个:第一就是把self.tableArr =
[dic objectForKey:@"result"]变成
[self.tableArraddObject:[dicobjectForKey:@"result"]].
第二个就是把[self.tableArr removeAllObjects]
变成self.tableArr
= [NSMutableArrayarrayWithCapacity:0].
转载请注明出处http://blog.csdn.net/u013263917/article/details/22053039。谢谢
相关文章推荐
- day17集合框架的工具类Collections。二分法查找原理 。操作数组的工具类Arrays,集合变数组。高级for循环。可变参数
- 链表的可变数组的实现和一些基本操作
- ios可变数组的所有操作
- 不可变数组的基本操作
- go语言笔记——数组长度不可变,但是元素值是可变的!!!
- java 数组操作1.5后新特性--可变参数以及foreach使用
- OC的不可变数组以及可变数组
- OC_数组(可变、不可变)
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
- python中set(可变集合)、frozenset(不可变集合)的基本操作
- OC之对不可变字符串、可变字符串、可变数组的操作及OC中字符串的排序
- 数组的常用方法(不可变:NSArray, 可变:NSMutableArray)
- iOS不可变数组的所有操作
- oc中可变数组,可变字符串相关操作
- OC中不可变数组与可变数组
- OC中不可变数组和可变数组的操作方法
- 可变数组的操作插入删除
- 将数组转为List的方法,转换后不可执行List的哪些操作?
- python 类C数组的两种形式:list -->内容可变, tuple --->内容不可变
- 可变数组不下心变成了不可变数组