2012-07-25 3 views
0

다음과 같은 코드를 작성할 수 있습니까? 작동하는 것 같다,하지만 난이/안전 허용 있는지 확인하려면 : (가 않습니다 열거 할 때 직접 배열을 수정로) 즉시 예외를 발생하지 않는 경우NSMenu - 메뉴의 항목을 반복하면서 메뉴에서 항목 삭제

// menu is a NSMenu* 
for (NSMenuItem *item in [menu itemArray]) { 
    if (some condition) { 
     [menu removeItem:item]; 
    } 
} 

답변

0

그때 아마 괜찮습니다. NSMenu은 내부 배열의 복사본을 제공 할 수 있습니다 (항목이 NSArray 인 것으로 가정 할 경우).

그러나 안전을 위해 두 단계로 수행하는 것이 좋습니다. 제거 항목을 유지하는 또 다른 배열을 만든 다음 을 열거하고 제거를 수행

그냥 레코드에 대한
NSMutableArray * itemsToRemove = [NSMutableArray array]; 
for(NSMenuItem *item in [menu itemArray]){ 
    if(some condition){ 
     [itemsToRemove addObject:item]; 
    } 
} 

for(NSMenuItem * item in itemsToRemove){ 
    [menu removeItem:item]; 
} 
+0

마지막 단계는 [menu removeObjectsInArray : itemsToRemove]로 단축 할 수 있습니다. –

+0

@ Martin : NSMenu에는 그런 방법이 없다고 생각합니다. –

+0

네, 맞습니다. NSMutableArray 만 보았습니다. 죄송합니다. –

0

:
당신이 보조 배열이 사용 만들려는 메모리에 대한 관심과 해달라고하는 경우 :

for (int i = menu.itemArray.count - 1; i >= 0; --i) 
{ 
    if(some condition for index i){ 
     [menu removeItemAtIndex:i]; 
    } 
}