Objective-C类别方法可用于子类?

时间:2010-08-03 11:16:07

标签: iphone objective-c ipad categories

我有以下类别:

@interface UIViewController (Additions)

- (void)exampleMethod;

@end

-----

#import "UIViewController+Additions.h"

@implementation UIViewController (Additions)

- (void)exampleMethod {
    NSLog(@"Example.");
}

@end

我还有以下抽象类:

@interface DFAbstractViewController : UIViewController

@end

-----

#import "DFAbstractViewController.h"
#import "UIViewController+Additions.h"

@implementation DFAbstractViewController

@end

这是具体的课程:

#import "DFAbstractViewController.h"

@interface DFConcreteViewController : DFAbstractViewController

@end

-----

#import "DFConcreteViewController.h"

@implementation DFConcreteViewController

- (void)viewDidLoad {
    [self exampleMethod];
}

@end

好。所以我的理解是具体类DFConcreteViewController可以使用从其超类DFAbstractViewController中的类别导入的方法。这是正确的,因为方法调用按预期工作。

问题是Xcode给了我以下警告:'DFConcreteViewController' may not respond to '-exampleMethod'

我没有看到这个方法及其对DFConcreteViewController的可用性如何对编译器不完全清楚?也许我误解了一些关于类别的东西?

1 个答案:

答案 0 :(得分:11)

右。我想到了。这是一个基本的错误,我感到相当愚蠢。如果您希望类别方法对子类可见,请务必在标题中导入您的类别

#import "UIViewController+Additions.h"

@interface DFAbstractViewController : UIViewController

@end