未找到实例方法

时间:2012-08-25 17:11:24

标签: objective-c xcode cocos2d-iphone

我很难过,我对Objective-C还不是很好,直到现在我一直在关注教程。

我决定在一个名为GeneralHelper的“CommonClass”中添加我在multipul视图中使用的所有函数。

尝试调用我的函数时出现以下错误:

  

Instance method'-convertPoint:'not found(返回类型默认为   'ID')

以下是我的代码:

我的GeneralHelper.h看起来像这样:         #import

    @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

在我的Initialize方法中,我有:

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

我想把它称为:

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

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:1)

您需要在班级界面中声明convertPoint:方法。

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

标题充当“这里是您使用此类所需的所有信息”,其中一条重要信息是“这里是您可以发送给此类的消息,以及它们采用的参数。”

您的具体警告是由于编译器无法在界面中看到该方法的返回类型而引起的。

答案 1 :(得分: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

实现与以前相同,但使用+而不是 - 符号。在这种情况下,您不需要sharedHelper方法,只需将其称为:

CGPoint convertedPoint = [GeneralHelper convertPoint:point];