【问题标题】:Objective-C category method available to subclasses?子类可用的Objective-C类别方法?
【发布时间】:2010-08-03 11:16:06
【问题描述】:

我有以下类别:

@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 的可用性是如何不完全清楚的?也许我对类别有误解?

【问题讨论】:

    标签: iphone objective-c ipad categories


    【解决方案1】:

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

    #import "UIViewController+Additions.h"
    
    @interface DFAbstractViewController : UIViewController
    
    @end
    

    【讨论】:

    • 遇到了同样的问题,并在努力解决问题时遇到了您的帖子。但是,我包含了正确的标头(类+类别)并且仍然收到编译器警告。
    • Matt,您是在头文件(.h)中导入类别而不是实现吗?只有在.h文件中导入类别时,编译器才能看到超类类别方法。
    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 2012-01-21
    • 2010-12-07
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多