2012-10-08 39 views
0

我在創建一種類型的自定義類Frank時遇到問題。當我做我收到以下錯誤:目標c:未找到Init方法

Class method '+initWithWorld::' not found (return type defaults to '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

爲什麼downvote沒有任何反饋? – Chris

+1

答案已在下面給出,但也要注意,init ...方法返回'id',而不是'void'。 –

回答

3

的對象必須是分配第一:

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

init方法是成員方法(寬a -標誌),這意味着你需要調用它的分配對象上,而不是方法(具有+符號)。

編輯

正如指出由@JustSid,這樣的init方法也必須返回一個對象(類型id)。
所以正確的方法原型爲:然後

- (id)initWithWorld: (b2World *)world : (CCNode *)parent; 

實現應該是這樣的:

- (id)initWithWorld: (b2World *)world : (CCNode *)parent; 
{ 
    if((self = [ self init ])) 
    { 
     /* Your initialisation here */ 
    } 

    return self; 
} 
+0

另外:方法簽名表示該方法不返回任何內容,但它應該返回一個'id'。 – JustSid

+0

@JustSid感謝您指出這一點。在我的答案中添加了一個編輯。 :) – Macmade

+0

啊這是有道理的,我已經非常接近這幾次我只是沒有得到正確的配置 - 謝謝 – Chris

1

你調用initWithWorld::作爲一個類的方法,而不是一個實例方法。您需要

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

方法+alloc是一個類方法返回接收器的新分配但是沒有初始化實例(在這種情況下,類Frank)。對這樣一個對象唯一允許做的事情是初始化它,這是通過調用適當的-init方法(在這種情況下爲-initWithWorld::)來完成的。

相關問題