我在创建自定义类Frank
时遇到问题。当我这样做时,我收到以下错误:
未找到类方法'+ initWithWorld ::'(返回类型默认为 'ID')
我的课程定义如下:
@interface Frank : NSObject {
PhysicsSprite *frankSprite;
b2Body *body;
float weight;
}
@property (readonly) b2Body *body;
-(void)initWithWorld:(b2World *) world :(CCNode *)parent;
-(void)moveLeft;
-(void)moveRight;
@end
我像这样创建对象:
frank = [Frank initWithWorld:world :self];
我做错了什么?
答案 0 :(得分:3)
首先需要分配对象:
frank = [ [ Frank alloc ] initWithWorld: world :self ];
您的init
方法是成员方法(宽度为-
符号),这意味着您需要在已分配的对象上调用它,而不是类方法(带有+
符号)。
修改强>
正如@JustSid所指出的,这样的init
方法也必须返回一个对象(类型id
)。
所以正确的方法原型是:
- ( id )initWithWorld: ( b2World * )world : ( CCNode * )parent;
实现应该是这样的:
- ( id )initWithWorld: ( b2World * )world : ( CCNode * )parent;
{
if( ( self = [ self init ] ) )
{
/* Your initialisation here */
}
return self;
}
答案 1 :(得分:1)
您将initWithWorld::
称为类方法而不是实例方法。你需要
frank = [[Frank alloc] initWithWorld:world :self];
方法+alloc
是一个类方法,它返回一个新分配但未初始化的接收者实例(在本例中为类Frank
)。你唯一允许这样做的对象是初始化它,这是通过调用适当的-init
方法(在这种情况下,-initWithWorld::
)来完成的。