0

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

  • 不完整的实现(在'@implementation myViewController'行)

我的课程代码如下所示:

//...

@implementation myViewController

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

//...

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

#import "CustomUIView.h"

//...

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

//...

@end

我想我必须在头文件的错误部分声明该方法,可能是由于该子句?或者我完全错过了其他东西。我已经很好地浏览了网络,据我所知,我正在遵循协议;也许我的设置有些特殊?

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

@class CustomUIView;

@protocol CustomUIViewDelegate <NSObject>

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

2 回答 2

1

Your mistake is in the name of the method. Implementation is didSelectText and interface is didSelectTerm. (Text vs Term -> obviously should be the same) Also, you call [[self class] otherMethod:text]; as a class method, which, if you look closely, is not.

于 2012-11-04T14:06:33.997 回答
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:

Not only are the two names different, but the types of the first parameters are different as well, one takes a CustomUIView *, the other takes a TSAlertView *, which might work if one is a subclass of the other, but in any case, your method names are wrong.

于 2012-11-04T14:06:27.273 回答