Сбой приложения с NSMutableArray - PullRequest
2 голосов
/ 29 февраля 2012

Я довольно новичок в 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 Ответ

7 голосов
/ 29 февраля 2012

Вы не можете удалить объект из NSMutableArray во время быстрого перечисления (см. документация ).

Вы можете добавить объекты (которые должны быть удалены) в отдельный NSMutableArray и удалить объекты из этого массива из массива 'main':

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

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

[originalArrayOfItems removeObjectsInArray:discardedItems];

Также см. Удаление объекта из NSMutableArray и Лучший способ удаления из NSMutableArray во время итерации? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...