解决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%左右,这个的原理是这样的:
找到符合的条件之后,暂停遍历,然后修改数组的内容
这种方法非常简单哟
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。