2014-04-02 116 views
0

我正在製作一款遊戲,而部分遊戲則是一隻收集雞蛋的兔子。當兔子與蛋相撞時,我遇到了一個問題,那就是遊戲崩潰。我得到的錯誤是收集< __NSArrayM:0x17805eed0>被列舉時發生了變異。'碰撞後刪除對象

我有一個雞蛋的圖像,雞蛋出現在每兩秒鐘後,當兔子相交的雞蛋時,我只想讓雞蛋消失並給予1分。

這裏是我使用

在頭文件中的代碼,我有

@property (strong, nonatomic) NSMutableArray *eggs; 

和實現文件我有這個添加雞蛋

UIImageView *egg = [[UIImageView alloc] initWithFrame:CGRectMake(CGRectGetWidth([[self gameView] frame]), holeBottom - 115 , 50, 60)]; 

[egg setImage:[UIImage imageNamed:@"easterEgg.png"]]; 
[[self gameView] insertSubview:egg belowSubview:[self counterLabel]]; 
[[self eggs] addObject:egg]; 

而這個檢測碰撞並試圖移除雞蛋

for (UIView *egg in [self eggs]) { 
    [egg setFrame:CGRectOffset([egg frame], [link duration]*FBSidewaysVelocity, 0)]; 
    if (CGRectIntersectsRect (rabbit.frame, CGRectInset ([egg frame], 8, 8))) { 
     [[self eggs]removeLastObject]; 
     [self incrementCount]; 
    } 
} 

我希望你能看到我的代碼出錯了,並幫助我糾正這個問題。

預先感謝您的寶貴時間

回答

1

錯誤消息),而(例如,使用for in環)

的項目EATCHIP枚舉它ST的解決辦法是複製的收集和枚舉複製一個

for (UIView *egg in [[self eggs] copy]) { // <-- copy 
    // you can modify `[self eggs]` here 
} 

NSMutableArray *tobeRemoved = [NSMutableArray array]; 
for (UIView *egg in [self eggs]) { 
    if (condition) 
     [tobeRemoved addObject:egg]; 
} 

[[self eggs] removeObjectsInArray:tobeRemoved]; 
+0

你是最棒的! @Bryan Chen非常感謝你的配偶,它的工作非常完美。 – user2632573

1

Collection <__NSArrayM: 0x17805eed0> was mutated while being enumerated正因爲你遍歷數組,而在同一時間刪除該數組中的對象引起的。有幾種方法可以解決這個問題,一種方法是在循環遍歷原始數組eggs並在循環結束之後創建一個要刪除的對象的新數組,循環遍歷此新數組並執行刪除操作。

代碼示例:

NSMutableArray *eggs;//this is full of delicious eggs 

//... 

NSMutableArray *badEggs = [NSMutableArray array];//eggs that you want to removed will go in here 

for(NSObject *egg in [self eggs]){ 
    if([egg shouldBeRemoved]){//some logic here 
     [badEggs addObject:egg];//add the egg to be removed 
    } 
} 


//now we have the eggs to be removed... 

for(NSObject *badEggs in [self badEggs]){ 
    [eggs removeObject:badEgg];//do the actual removal... 
} 

:你的代碼[[self eggs]removeLastObject];線看起來像一個錯誤在任何情況下......這將刪除對象的數組的末尾(我不認爲你如果很清楚,你不能可變集合(例如,刪除元素要做到這一點...)