2014-10-05 4 views
1
-(CCNode *)createFieldNode:(NSMutableArray *)fieldArray{ 

    CGSize winSize = [CCDirector sharedDirector].viewSize; 
    CCNode* stackNode= [CCNode node]; 

    for (int i; i <=fieldArray.count; i++){ 
     //itemP is previous item in array and itemC is current item in area based on index i 
     BPItem*itemP; 
     BPItem*itemC; 

     if(i!=0){ 
      itemP=[fieldArray objectAtIndex:i-1]; 
      itemC=[fieldArray objectAtIndex:i]; 
      float stackWidth=arc4random()%200+50; 
      float stackHeight=itemP.position.y+itemP.contentSize.height; 
      itemC.position=ccp(stackWidth,stackHeight); 
     } 
     else{ 
      itemC=[fieldArray objectAtIndex:i]; 
      float stackWidth=arc4random()%200+50; 
      itemC.position=ccp(stackWidth,0); 
     } 

     //having trouble adding multiple nodes to stackNode 
     [stackNode addChild:itemC]; 
    } 

    return stackNode; 
} 

fieldArray의 CCNodes를 부모 CCNode "stackNode"에 추가하고 싶습니다. 내가 브레이크 포인트를 사용할 때 인덱스 0에서 CCNode를 추가 할 수 있고 인덱스 1에서 CCNode를 추가 할 수 있습니다. 그러나 프로그램은 i = 2에서 충돌합니다. 내가받는 오류는 다음과 같습니다.for 루프를 사용하여 CCNode를 부모 CCNode에 추가하십시오.

'NSInternalInconsistencyException'이라는 캐치되지 않은 예외로 인해 앱 종료 중입니다. '자식이 이미 다른 노드에 추가되었습니다. 다시 추가 할 수 없습니다. '

크래시가 발생하기 전에 "stackNode"에 두 개의 자식이 있습니다. 나는 많은 수의 arrayArray.count가있는 수백 개의 다른 배열을 가지고 있기 때문에 하나씩 CCNode를 추가하지 않을 것이다. 내가 명확하지 않다면 더 설명 할 수 있도록 도와주세요.

답변

1

변경 루프 시작을 위해 다음에 같이 또한

//itemP is previous item in array and itemC is current item in area based on index i 
BPItem*itemP; 
BPItem*itemC;        // moved out of the for loop 
for (int i; i <fieldArray.count; i++){ // <- changed the end condition to avoid crash 
    ... rest of loop 

, fieldArray를 생성하는 코드에서 (당신은 중복이 없는지 확인하기 위해 논리를 특정 할 그렇지 않으면 같은 문제가되지만 전혀 다른 이유로).