目标c:未找到Init方法

时间:2012-10-08 21:24:26

标签: iphone objective-c

我在创建自定义类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];

我做错了什么?

2 个答案:

答案 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::)来完成的。