Cocos2d iphone 子类化CCSprite时的奇怪行为

Cocos2d iphone 子类化CCSprite时的奇怪行为,cocos2d-iphone,subclass,Cocos2d Iphone,Subclass,我有这个: //Node.h @interface Node: CCSprite{ BOOL wasTouched; } -(BOOL)getTouched; // some other methods //Node.m -(BOOL)getTouched{ return wasTouched; } -(id)init{ wasTouched=NO; } //wasTouched changes in the other methods..when t

我有这个:

//Node.h

 @interface Node: CCSprite{
 BOOL wasTouched;
 }
 -(BOOL)getTouched;
 // some other methods

 //Node.m

 -(BOOL)getTouched{
 return wasTouched;
 }

-(id)init{
    wasTouched=NO;
    }

//wasTouched changes in the other methods..when they are called (no problem here)


//Game.m

//i make an array of nodes and do some stuff

-(void)someMethod{
    for (Node *node in arrayOfNodes){
    if ([node getTouched]) {  //here it crashes
    //code
    }}}
它会崩溃,并显示消息
-[CCSprite getTouched]:无法识别的选择器发送到实例0x236dd0


问题是:为什么

您可能在节点数组中插入了一个普通的CCSprite

-(id)init{
    wasTouched=NO;
    }
这很痛(

您必须始终调用init方法的超级实现。您还必须在此处返回self。编译器没有抱怨缺少返回值吗?建议:不要忽略编译器警告

这两种情况都可能导致非常奇怪的行为,包括崩溃。下面是修复方法:

-(id) init
{
    self = [super init];
    if (self)
    {
        wasTouched = NO;
    }
    return self;
}

您如何接收
arrayOfNodes
,您能否确认in中确实只包含
Node
对象而不包含
CCSprite
?我在游戏的init方法中创建了一个随机的节点数组,并且我已经检查了其他自定义方法是否有效..只有这不起作用。我正在尝试重写代码来解决这个问题。。这显然不是完整的代码…不管怎样..我做了一个变通,现在看起来还可以