[Bug]枚举数组,并找到某些元素删除
2016-10-14 11:06
162 查看
lldb报错:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7f9a5a47dda0> was mutated while being enumerated.'
bug代码:
原因:
当for in 时,正在被枚举的时候,改变数组(例如删除),会打乱其的count 。
解决一:将要操作的数据copy到另一个数组里
解决二:循环枚举顺序,不要从 0到 count 改成从count到0
解决三:
Tip:其实这个问题,自己遇到过,并且解决了。但是没有做记录,结果再次遇到的时候,只觉得lldb报错眼熟,还花了大力气到google 上搜。好记性不然烂笔头。这次做个笔记,
参考文档:http://www.cocoachina.com/bbs/read.php?tid=23251
bug代码:
//判断是否存在,存在就删除 for (NSDictionary *dic in userAccountPwdMutalDatas) { if ([dic objectForKey:account]) { [userAccountPwdMutalDatas removeObject:dic]; }
原因:
当for in 时,正在被枚举的时候,改变数组(例如删除),会打乱其的count 。
解决一:将要操作的数据copy到另一个数组里
NSMutableArray * arrayB = [[NSMutableArray alloc] init]; for (arrayA *a in anArray){ if(some condition){ //[anArray removeObject:a]; [arrayB addObject:a]; } } [arrayA removeObjectsInArray:arrayB];
解决二:循环枚举顺序,不要从 0到 count 改成从count到0
for(int i = [anArray count] -1;i>=0;i--){ }
解决三:
for(int i=0; i < [array count]; i++){ if(YES){ [array removeObjectAtIndex:i]; i--; } }
Tip:其实这个问题,自己遇到过,并且解决了。但是没有做记录,结果再次遇到的时候,只觉得lldb报错眼熟,还花了大力气到google 上搜。好记性不然烂笔头。这次做个笔记,
参考文档:http://www.cocoachina.com/bbs/read.php?tid=23251
相关文章推荐
- 1.数组合并同时删除相同的元素2.删除数组某些元素
- 关于swift for 循环 遍历数组删除元素的bug问题
- jquery中找到元素在数组中位置,添加或者删除元素的新方法
- JavaScript 删除数组的某些元素的问题
- 数组、List中,删除容器中的某些元素时使用倒叙删除
- 利用Array的splice方法,删除数组的元素
- 删除vector数组中指定元素
- 删除数组中从X开始长度为N的元素
- VB中删除数组重复元素
- JS中split用法和数组中元素的删除
- 2006第一个工作日--js删除数组某个元素[2006-02-05]
- PHP删除重复数组元素
- c语言心得-----数组中对元素的操作排序,查找,插入,和删除
- Javascript 删除数组中指定元素
- 递归列举从数组b()中选出某些元素(允许重复)使其和等于num的所有组合
- 删除数组中重复元素
- 递归列举从数组b()中选出某些元素(允许重复)使其和等于num的所有组合
- C语言-删除数组中的元素
- 快速找到两个有序数组第(m+n)/2个元素
- 如何删除动态数组的指定元素 - 回复 "Splendour" 的部分问题