崩潰提示: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); } }];