我已将我的一个实例方法更改为类方法,以便可以从另一个类访问它。该方法已成功调用,但我的代码上有一条警告:
我的班级代码如下:
//...
@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 :(得分: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 *
,如果一个是子类,则可能有效另一方面,但无论如何,你的方法名称是错误的。