我正在尝试使用来自第二个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
}
答案 0 :(得分:0)
1 /按照惯例,最好使用最长的init ...方法。尝试使用initWithCapacity:而不是NSMutableArray上的基本init方法。 2 /在将对象添加到NSMutableArray之后,必须释放它以使该数组成为唯一所有者。
答案 1 :(得分:0)
正如我上面的一条评论所述:
添加一些日志记录有帮助。它强迫我查看控制台日志,该日志实际上是一个错误(或可能是警告),它阻止了对象被添加到数组中。添加上方的init行失败,因为无法找到纹理。
所以我误解了这些症状,因此这里的话题对于将来访问它的人来说可能有点误导。