2012-08-25 61 views
0

我很難過,即時通訊Objective-C不是很好,而且我一直在學習下面的教程。實例方法沒有找到

我決定在一個叫做GeneralHelper的「CommonClass」中添加所有我在multipul視圖中使用的函數。

當試圖打電話給我的功能即時得到以下錯誤:

Instance method'-convertPoint:' not found(return type defaults to 'id')

下面是我的代碼:

我GeneralHelper.h lookslike此:#進口

@interface GeneralHelper : NSObject 

    @end 

    GeneralHelper* gHelper; 

我GeneralHelper.m如下所示:

#import "GeneralHelper.h" 
    #import "WhackGame.h" 
    #import "SimpleAudioEngine.h" 
    #import "Settings.h" 

    @implementation GeneralHelper 
    -(CGPoint)convertPoint:(CGPoint)point { 
     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
      return ccp(32 + point.x*2, 64 + point.y*2); 
     } else { 
      return point; 
     } 
    } 

    @end 

在我的初始化方法,我有:

gHelper = [[GeneralHelper alloc] init]; //First, we create an instance of GeneralHelper 

和IM嘗試調用它像:

mole1.position = [gHelper convertPoint:ccp(85, 85)]; 

任何想法?

感謝

回答

0

你沒有申報的方法convertPoint:@interface這樣的:

@interface GeneralHelper : NSObject 
- (CGPoint)convertPoint:(CGPoint)point; 
@end 

另外,如果你想擁有的GeneralHelper的一個共享實例,這不是辦法做到這一點。相反,你應該有一個返回實例的類方法。

@interface GeneralHelper : NSObject 
- (CGPoint)convertPoint:(CGPoint)point; 
+ (GeneralHelper *)sharedHelper; 
@end 
在您的實現

然後:

+ (GeneralHelper *)sharedHelper 
{ 
    static GeneralHelper *sharedHelper = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedHelper = [[GeneralHelper alloc] init]; 
    }); 
    return sharedHelper; 
} 

然後無論你需要它:

CGPoint convertedPoint = [[GeneralHelper sharedHelper] convertPoint:point]; 

或者你可以簡單地使用類方法:

@interface GeneralHelper : NSObject 
+ (CGPoint)convertPoint:(CGPoint)point; 
@end 

實施和bef一樣礦石,但用+而不是 - 符號。在這種情況下,你不需要sharedHelper方法可以簡單地調用它像這樣:

CGPoint convertedPoint = [GeneralHelper convertPoint:point]; 
1

您必須聲明你convertPoint:方法在類的接口。

@interface GeneralHelper : NSObject 
- (CGPoint)convertPoint:(CGPoint)point; 
@end 

一個頭充當「這裏是所有你需要使用這個類的信息,」和信息的一個重要的部分是「在這裏,你可以發送到這個類的消息,他們採取什麼樣的參數「。

您的特定警告是由於編譯器無法在接口中未看到該方法的返回類型而導致的。