崩溃提示:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CALayerArray: 0x14df0bd0> was mutated while being enumerated.'
网上找了下,原因是因为一边遍历数组,又同时修改这个数组里面的内容,导致崩溃。
for in 循环中的便利内容不能被改变, 是因为如果改变其便利的内容会少一个, 而系统是不会允许这个发生的所以就会crash...但是当改变最后一个的内容时, 就不会crash, 是因为此时遍历已经结束, 结束之后对内容做修改是允许的。
有两种解决方法,第一种方法就是在定义一个一模一样的数组,便利数组A然后操作数组B; 第二种方法是找到符合的条件之后,暂停遍历,然后修改数组的内容。
解决方法详细代码分别如下:
NSMutableArray *mutArray = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3",@"4",nil];
NSArray *array = [NSArray arrayWithArray: mutArray];
for (NSString *str in array) {
if ([str isEqualToString:@"3"]){
[mutArray removeObject: str];
}
}
NSMutableArray *mutArray = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4",nil];
[mutArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isEqualToString:@"3"]) {
*stop = YES;
if (*stop == YES) {
[mutArray removeObject:obj];
}
}
if (*stop) {
NSLog(@"array is %@",mutArray);
}
}];
