Я пытаюсь заполнить один NSMutableArray
объектами из второго NSMutableArray
, находясь внутри цикла For для второго массива. Когда я добавляю объект в первый массив, меня выбивают из цикла. Это происходит внутри обратного вызова «расписание» в приложении COCOS2D.
Странно то, что он отлично работает в одном случае, но не в другом. Первый раз, когда это работает, отмечено ниже в примере кода. Второй раз также отмечен в коде, с соответствующей строкой, обозначенной 5 *. Единственное, что принципиально отличается, это то, что второй пример происходит снова и снова внутри цикла While, постоянно заполняя и опустошая второй NSMutableArray
.
Что-то явно происходит, чего я просто не понимаю. Я надеюсь, что кто-то сможет поймать его.
Заранее спасибо за помощь!
Следующий код является соответствующей частью метода:
NSMutableArray *gameSprites = [[NSMutableArray alloc] init];
NSMutableArray *guns = [[NSMutableArray alloc] init];
NSMutableArray *newGuns = [[NSMutableArray alloc] init];
// START OF THE FIRST EXAMPLE
// collect sprites that are guns
for (LPSprite *sprite in gameSprites)
{
if ([sprite isGun])
{
[guns addObject:gun];
}
}
// END OF THE FIRST EXAMPLE
// do work for all guns in gamesprite collection
int numGuns = [guns count];
while (numGuns > 0)
{
// START OF THE SECOND EXAMPLE
for (LPGun *gun in guns)
{
if (special condition that only occurs sometimes)
{
LPGun *portalGun = [[LPGun alloc] init];
// ***** When this line is executed, I get 'kicked' out of the method and execution starts again at the beginning of the method. No exception is thrown or noticed.
[newGuns addObject:portalGun];
}
}
numGuns = [newGuns count];
// empty gun collection and add any 'new' guns to the collection so the above work can be repeated
[guns removeAllObjects];
for (LPGun *g in newGuns)
{
[guns addObject:g];
}
[newGuns removeAllObjects];
// END OF THE SECOND EXAMPLE
}