bug:*** Collection <__NSArrayM: 0x1c444d440> was mutated while being enumerated.


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

        }

    }];

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM