2012-02-28 86 views
2

我很新的iOS,我不知道如何找到像JAVA像樣的堆棧跟蹤,所以我可以找到它爲什麼它崩潰是「sigabrt」。應用程序崩潰與NSMutableArray

我知道它與我剛剛添加的這段代碼有關。

-(void) clearGame { 
    for (CCSprite *sprite in placedSprites) { 
     if(sprite == nil) continue; 
     [self removeChild:sprite cleanup:NO]; 
     [placedSprites removeObject:sprite]; 
    } 
    placedSprites = [[NSMutableArray alloc] initWithCapacity:1000]; 
} 

我在哪裏添加的這個類是cocos2d中的一個圖層。在它的init方法中,我有

placedSprites = [[NSMutableArray alloc] initWithCapacity:1000]; 

我不知道什麼可能是錯的,所以任何幫助表示讚賞。

謝謝!

+0

當您只看到「SIGABRT」且沒有堆棧跟蹤或異常的細節時,請在XCode中添加一個「Exception breakpoint」。詳細信息在http://stackoverflow.com/questions/4961770/run-stop-on-objective-c-exception-in-xcode-4 – kuba 2012-02-28 21:40:12

回答

7

快速枚舉時無法從NSMutableArray中刪除對象(請參見documentation)。

您可以在對象(應刪除)添加到一個單獨的NSMutableArray並從你的「主」數組中刪除此數組對象:

NSMutableArray *discardedItems = [NSMutableArray array]; 
SomeObjectClass *item; 

for (item in originalArrayOfItems) { 
    if ([item shouldBeDiscarded]) 
     [discardedItems addObject:item]; 
} 

[originalArrayOfItems removeObjectsInArray:discardedItems]; 

另見Removing object from NSMutableArrayBest way to remove from NSMutableArray while iterating?

相關問題