2012-02-27 52 views
0

此代碼有什麼問題?我得到數組枚舉期間的應用程序崩潰

Collection <NSCFArray: 0x101e1b6d0> was mutated while being enumerated 

它的NSMutableArray,而不是NSArray的

NSMutableArray *set = [[NSMutableArray alloc]initWithObjects:@"first", @"second", @"third", @"third", nil]; 

    [set enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
    { 
     if([obj isEqualToString:@"third"]) 
     { 
      [set removeObjectAtIndex:idx]; 
     } 
    }]; 

    [pool drain]; 

回答

6

您在迭代迭代時不能改變(更改)集合,因爲迭代器對象也需要更改。您應該將要刪除的對象添加到數組中,然後將其刪除。

NSMutableArray *set = [[NSMutableArray alloc]initWithObjects:@"first", @"second", @"third", @"third", nil]; 

NSMutableArray *arrayOfObjectsToRemove = [[NSMutableArray alloc] init]; 
[set enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
{ 
    if([obj isEqualToString:@"third"]) 
    { 
     [arrayOfObjectsToRemove addObject:obj]; 
    } 
}]; 

[set removeObjectsInArray:arrayOfObjectsToRemove]; 

[pool drain];