lldb报错:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7f9a5a47dda0> was mutated while being enumerated.'
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 上搜。好记性不然烂笔头。这次做个笔记,