2012-02-27 5 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]; 
관련 문제