Cocos2D中。当我在不同的方法中使用预先存在的NSMutableArray时,我的应用程序崩溃 - (void)更新:(ccTime)delta方法 - (void)InitCats

时间:2014-03-16 17:12:58

标签: cocos2d-iphone

家伙!抱歉我的语言不好。 当我使用我在不同方法InitCats中创建的数组时,我的应用程序在Update方法中崩溃。我在@interface {}的头文件中创建了NSMutableArray * Cats和CCSprite * CA.

-(id)init
{
    [self InitCats];
    [self schedule:@selector(update:) interval:0.0f];
}

-(void)InitCats // This method is work well in -(id)init
{
    Cats = [NSMutableArray arrayWithCapacity:NumCats];

    for (int a=0; a<NumCats; a++)
    {
        CCSprite* Cat=[CCSprite spriteWithFile:@"1.png"];
        [Cats addObject:Cat];
    }

}

-(void) update:(ccTime)delta
{
for (int a=0; a<NumCats; a++)
    {
        CA = [Cats objectAtIndex:a]; //In this place I have ERROR, app crashes
        CA.position = CGPointMake(CA.position.x-1, CA.position.y);
    }
}

2 个答案:

答案 0 :(得分:0)

我猜你指的是释放的物体。尝试初始化你的数组

Cats = [[NSMutableArray alloc] initWithCapacity:NumCats];

和dealloc

-(void)dealloc
{
    [Cats release];
    [super dealloc];
}

答案 1 :(得分:0)

好的,问题是这句话:

Cats = [NSMutableArray arrayWithCapacity:NumCats];

这将创建一个自动释放的对象,但是在自动释放后,指向此对象的指针将为非nil,因此您的代码将引用一个已解除分配的对象。

您已经有了修复:

Cats = [[NSMutableArray alloc] initWithCapacity:NumCats]; 

arrayWithCapacity方法中移除InitCats来电。

(请注意,方法和实例变量名称的大写是非常规的。)