2012-11-04 30 views
0

我将其中一个实例方法更改为一个类方法,以便可以从另一个类访问它。该方法调用成功,但我有我的代码,一个警告:类方法的不完整实现 - 缺少什么?

  • 完全执行(就行了“@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 
+0

你的协议在哪里? –

+0

TSAlertView的实现在哪里? –

+0

@HotLicks本来打算将其改为通用的'myMethod';希望这个问题现在更有意义。 – CaptainProg

回答

1

你的错误在于方法的名称。实现是didSelectText,接口是didSelectTerm。 (文本与术语 - >显然应该是相同的)此外,您还可以将[[self class] otherMethod:text];作为类方法使用,如果仔细观察,方法不是。

+0

感谢您指出文字/术语。但是,我仍然收到错误... – CaptainProg

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 *,如果一个是它可能工作其他的子类,但无论如何,你的方法名称是错误的。

+0

但这不是他得到警告的原因,看到我的答案... –

+0

现在你编辑答案,你说得对,想编辑我的评论,但我没有能力,所以我增加了另一个强调 –

+0

我的道歉,我一直在改变我的方法名称,使我的问题更具可读性。在第一次编辑中,我忘记了相应地调整我的方法名称。更新后的代码反映了我应该*最初放置的内容。 – CaptainProg

相关问题