2012-11-13 5 views
0

내 업데이트 루프에 의해 안전 지점에서 제거 할 b2Bodies 배열을 가지고 있지만 가끔이 배열에 추가하지 않고 개체를 제거해야합니다. 이 작업을 수행하기 전에 본문이 이미 배열에 있는지 확인하고 제거하면 개체가 두 번 삭제되지 않으므로 예외가 발생합니다. 몸이 객관적인 목표라면 간단 할 것입니다.가변 배열에 b2Body가 있는지 확인하는 방법은 무엇입니까?

[bodiesToBeDestroyedMutableArray addObject:[NSValue valueWithPointer:body]]; 

나는 그들이 (가리키는)하는 경우 같은 몸을보고 주어진 b2Body 포인터에 bodiesToBeDestroyedMutableArray의 개체를 비교할 수 있습니다

객체는 다음과 같이 배열에 추가? 나는 시도했다 :

if ([bodiesToBeDestroyedMutableArray containsObject:[NSValue valueWithPointer:body]]) 

을 평등 테스트가 제대로 일을 언급 한 경우
+1

흠이 나에게 잘 보인다. 루프가 b2Body를 찾지 못했습니까? 어쨌든 배열에 절대로 존재하지 않았을 수 있습니까? –

+0

분명히 그럴 수 있습니다. 따라서 for 루프에서와 같은 방식으로 평등을 테스트하는 것이 허용 가능합니까? – glenstorey

답변

0

체크하지 않았

for(NSValue *bodyValue in bodiesToBeDestroyedMutableArray) { 
    b2Body *bodyToTest = (b2Body*)[bodyValue pointerValue]; 

    if(bodyToTest == body){ 
     NSLog(@"body found in bodies to be destroyed"); 
    } 
} 
...

당신은 어떤 종류를 설정하는 신체 -> SetUserData를 사용할 수 있습니다 식별자 (태그)를 사용하면 나중에 태그 사이의 형평성을 확인할 수 있습니다.

이미 mi 케이스의 경우처럼 userdata로 몸체에 다른 것을 설정 한 경우에도이 "태그"를 사용자 데이터로 설정하면 동일한 접근 방식이 유효합니다. 예를 들어

:

// Get the user data 
XXSomeClass *block = (__bridge XXSomeclass*)b->GetUserData(); 

// Retrieve body from array 
// Might need to cast the returning item from the array with (XXTypeAtArray *) 
XXTypeAtArray *item = [arrayOfBlocks objectAtIndex:block.tag]; 
관련 문제