2012-08-25 60 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 

一个头充当“这里是所有你需要使用这个类的信息,”和信息的一个重要的部分是“在这里,你可以发送到这个类的消息,他们采取什么样的参数“。

您的特定警告是由于编译器无法在接口中未看到该方法的返回类型而导致的。