0

我在创建自定义类的类型时遇到问题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];

我究竟做错了什么?

4

2 回答 2

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;
}
于 2012-10-08T21:27:15.403 回答
1

您正在调用initWithWorld::作为类方法而不是实例方法。你需要

frank = [[Frank alloc] initWithWorld:world :self];

该方法+alloc是一个类方法,它返回一个新分配但未初始化的接收器实例(在本例中为 class Frank)。唯一允许您对此类对象执行的操作是初始化它,这是通过调用适当的-init方法(在本例中为-initWithWorld::)来完成的。

于 2012-10-08T21:27:18.977 回答