类方法的不完整实现 - 缺少什么?

时间:2012-11-04 12:39:06

标签: objective-c implementation class-method

我已将我的一个实例方法更改为类方法,以便可以从另一个类访问它。该方法已成功调用,但我的代码上有一条警告:

  • 不完整的实施(在'@implementation myViewController'上)

我的班级代码如下:

//...

@implementation myViewController

#pragma mark - myMethod
+ (void)myMethod:(CustomUIView *)customView didSelectText:(NSString *)text
{
    //...
}

//...

在我的类头文件中,我有以下内容:

#import "CustomUIView.h"

//...

@interface myViewController : CustomUIViewController <CustomUIViewDelegate>
{
    //...
}

//...

@end

我想我必须在头文件的错误部分声明该方法,可能是由于该子句?或者我完全错过了其他的东西。我已经很好地了解了网络as far as I can tell I'm following protocol;也许我的设置有些特殊之处?

编辑:这是我的CustomUIView标头文件中的协议:

@class CustomUIView;

@protocol CustomUIViewDelegate <NSObject>

+ (void)myMethod:(CustomUIView *)customView didSelectText:(NSString *)text;
//...
@end

2 个答案:

答案 0 :(得分:1)

你的错误在于方法的名称。实施是didSelectText,接口是didSelectTerm。 (文本与术语 - &gt;显然应该相同)另外,您将[[self class] otherMethod:text];称为类方法,如果仔细观察,则不是。

答案 1 :(得分:0)

您的更改没有意义。

您可以从其他类访问实例方法 - 它们不必是类方法。类方法意味着它们是由类实现的方法 - 而不是类的实例。

其次,在新的类方法中,您正在调用一个方法(otherMethod :)作为实例方法,即由类的对象调用的方法。由于你在[[self Class] otherMethod:text]调用它,这是错误的,因为[self Class]用于调用类方法,而不是实例方法。您没有对类的对象的有效引用来发送消息。

添加:

您已实施了一种方法:

+ (void)myMethod:(CustomUIView *)customView didSelectTerm:(NSString *)text;

但您的协议期望:

+ (void)termTextClickedOn:(TSAlertView *)customView didSelectTerm:(NSString *)term;

您提供实际参数的名称无关紧要,因此文本和术语的差异不计算在内,但方法名称(如Objective-C中所述)归结为:

+ myMethod:didSelectTerm:

+ termTextClickedOn:didSelectTerm:

不仅两个名称不同,而且第一个参数的类型也不同,一个采用CustomUIView *,另一个采用TSAlertView *,如果一个是子类,则可能有效另一方面,但无论如何,你的方法名称是错误的。