首页 > 代码库 > 解决Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated
解决Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated
当程序出现这个提示的时候,是因为你一边便利数组,又同时修改这个数组里面的内容,导致崩溃,网上的方法如下:
1 2 3 4 5 6 7 8 9 | NSMutableArray * arrayTemp = xxx; NSArray * array = [ NSArray arrayWithArray: arrayTemp]; for ( NSDictionary * dic in array) { if (condition){ [arrayTemp removeObject:dic]; } } |
这种方法就是在定义一个一模一样的数组,便利数组A然后操作数组B
今天终于找到了一个更快接的删除数组里面的内容以及修改数组里面的内容的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | NSMutableArray *tempArray = [[ NSMutableArray alloc]initWithObjects: @"12" , @"23" , @"34" , @"45" , @"56" , nil ]; [tempArray enumerateObjectsUsingBlock:^( id obj, NSUInteger idx, BOOL *stop) { if ([obj isEqualToString: @"34" ]) { *stop = YES ; if (*stop == YES ) { [tempArray replaceObjectAtIndex:idx withObject: @"3333333" ]; } } if (*stop) { NSLog ( @"array is %@" ,tempArray); } }]; |
利用block来操作,根据查阅资料,发现block便利比for便利快20%左右,这个的原理是这样的:
找到符合的条件之后,暂停遍历,然后修改数组的内容
这种方法非常简单哟
解决Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。