2014-10-05 24 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循環將CCNodes添加到父CCNode

終止應用程序,由於未捕獲的異常'NSInternalInconsistencyException',原因:'子節點已添加到另一個節點。它不能再被添加'

崩潰之前「stackNode」有兩個孩子。我不是一個接一個地添加CCNode,因爲我有數百個不同的數組,並且有大約20個fieldArray.count。請幫助我解釋更多,如果我不清楚的話。

回答

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的代碼,使某些你的邏輯,以確保有沒有重複,否則就會有同樣的問題(但原因完全不同)。

相關問題