我使用CCSprites填充NSMutableArray并将它们添加到添加到场景的当前图层。当我尝试访问数组的元素时,我得到一个错误的访问错误
sprites = [[[NSMutableArray alloc] init]autorelease];
int j = 0;
for (int i=0; i<[sprites count]; i++)
{
j=i+1;
sprite = [CCSprite spriteWithFile:[NSString stringWithFormat:@"intro%d.png",j]];
sprite.position = ccp(WIDTH/2, HEIGHT/2+(i*HEIGHT));
[sprites addObject:sprite];
}
for (int i = 0; i<[sprites count]; i++)
{
[self addChild:[sprites objectAtIndex:i]];
}
[self scheduleUpdate];
}
return self;
这是在init方法中完成的,sprite和sprite是在头文件中声明的。在更新方法中,我有
sprite = [sprites objectAtIndex:1];
sprite.position = ccpAdd(sprite.position, ccp(0,dy));
CCSprite* spr = [sprites objectAtIndex:2];
spr.position = ccpAdd(spr.position, ccp(0,dy));
当控制权传递给更新方法时,我获得了错误的访问权限。如果有人能帮助我,我会很高兴
答案 0 :(得分:0)
你应该保留sprite数组(确保你在对象的dealloc中释放它)。由于它是可自动释放的,因此在从init到update方法的循环中,它会被释放。
另外(奇怪),如果您的代码如图所示,当您开始第一个循环时,sprites.count为0。你不会在那里得到太多:)。
答案 1 :(得分:0)
发生这种情况是因为您创建了一个自动释放对象,然后您尝试稍后在更新代码中访问该对象。精灵数组的保留计数为零(因为它是自动释放),并且取消分配,然后尝试访问它,并获得错误访问错误。
要修复,你应该不使sprite数组成为自动释放对象。由于您计划稍后在代码中使用该对象,因此应保留该对象(不添加自动释放)。您还应该确保在(无论是在数组上运行的父对象)的dealloc方法中释放数组。
- ( void ) dealloc {
[ sprites release ];
[ super dealloc ];
}
答案 2 :(得分:0)
其他是正确的(autorelease
调用是罪魁祸首 - 你应该删除它,然后在场景的dealloc
方法中释放数组。)
另请注意,[[[NSMutableArray alloc] init]autorelease]
与[NSMutableArray array]
具有相同的效果(但对于您的方案,这不是您所需要的)。