应用程序崩溃与NSMutableArray

时间:2012-02-28 21:00:44

标签: ios cocos2d-iphone

我对iOS很陌生,我不知道如何找到像JAVA这样体面的堆栈跟踪,所以我只能找到它崩溃的原因,“sigabrt”。

我知道这与我刚添加的代码有关。

-(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];

我不知道会出现什么问题,所以感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:7)

快速枚举时,您无法从NSMutableArray移除对象(请参阅documentation)。

您可以将对象(应该删除)添加到单独的NSMutableArray,并从“main”数组中删除此数组中的对象:

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?