2010-08-03 58 views
2

我有以下類別:Objective-C類別方法可用於子類嗎?

@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的可用性是不是完全清楚的編譯器?也許我誤解了類別的一些東西?

回答

11

沒錯。我想到了。這是一個基本的錯誤,我覺得這很愚蠢。如果你希望你的分類方法是可見的子類,確保導入類別中你的頭

#import "UIViewController+Additions.h" 

@interface DFAbstractViewController : UIViewController 

@end 
+1

一直有同樣的問題,並在努力解決這個問題在你的崗位來了。但是,我包含正確的頭文件(類+類),並仍然收到編譯器警告。 – 2011-01-26 09:25:32

+1

馬特,你是否在頭文件(.h)中導入類別而不是實現?編譯器只能在.h文件中導入類別時才能看到超類別方法。 – 2011-01-26 14:35:07

相關問題