为int属性发生无法识别的选择器

时间:2012-12-20 12:14:04

标签: objective-c ios properties cocos2d-iphone unrecognized-selector

我有一个名为Projectile的类(它继承自Cocos2D CCSprite类,但我怀疑这与问题有关)。它包含的所有内容都是一个名为'type'的int,我将其作为属性。

Projectile.h:

@interface Projectile : CCSprite{

int type;

}

@property int type;

@end

Projectile.m:

#import "Projectile.h"

@implementation Projectile

@synthesize type;

@end

现在我要做的就是在游戏的主要类中设置该属性,如下所示:

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{

Projectile *newProjectile = [CCSprite spriteWithSpriteFrameName:@"Bullet.png"];

newProjectile.position = spaceShip.position;

newProjectile.type = kLaser;               // defined earlier as #define kLaser 1


[objectsSpriteSheet addChild:newProjectile z:kProjectileZValue];

[projectiles addObject:newProjectile];

return YES;

}

每次运行时,它都会在newProjectile.type = kLaser行崩溃:

-[CCSprite setType:]: unrecognized selector sent to instance 0x1ed82f10

看起来似乎太简单了,并且Xcode清楚地知道该属性,因为它自动填充它并且不会给我一个错误,说它不存在。

我在其他地方也有非常相似的代码可以完美执行。

如果有人可以对此有所了解,我会非常感激,我相信我可以用另一种方式解决问题,但我想了解为什么如果可能的话这不起作用。

3 个答案:

答案 0 :(得分:4)

是的,当你说Projectile *newProjectile = [CCSprite spriteWithSpriteFrameName:@"Bullet.png"];时,newProjectile将是CCSprite类型的对象,它没有该属性。

答案 1 :(得分:2)

此行导致问题:

Projectile *newProjectile = [CCSprite spriteWithSpriteFrameName:@"Bullet.png"];

将其更改为:

Projectile *newProjectile = [Projectile spriteWithSpriteFrameName:@"Bullet.png"];

您正在创建CCSprite的实例并将其分配给它的子类。 CCSprite类没有类似的属性。

答案 2 :(得分:1)

我不确定,只是试试这个:

Projectile *newProjectile = (Projectile *)[CCSprite spriteWithSpriteFrameName:@"Bullet.png"];