配列の走査中にデータを消すとでるエラー Collection was mutated while being enumerated.
配列の走査中に格納されているデータを消すと[Collection was mutated while being enumerated.]というエラーでアプリが落ちた。
NSMutableArray *array = @[@"a", @"b", @"c", @"d"]; for (NSString str in array) { if ([str isEqualToString:@"b"]) { [array removeObject:str]; //Collection was mutated while being enumerated. エラー発生 } }
列挙子を用いてアクセスしている最中に、配列の中身を変更するなということみたい。
解決法としては配列の後ろから走査するreverseObjectEnumeratorを使えば良い
NSMutableArray *array = @[@"a", @"b", @"c", @"d"]; for (NSString str in [array reverseObjectEnumerator]) { if ([str isEqualToString:@"b"]) { [array removeObject:str]; //成功 } }
配列の後ろから走査することで既に走査済みのデータが消されたところで問題ないため。