避免使用协议方法找不到的方法

时间:2012-12-18 19:18:04

标签: cocoa polymorphism protocols

My Cocoa AppDelegate在其主视图中包含类型ID的引用。引用是多态的,因为它可能指向PDFView的子类或NSImageView的子类,具体取决于视图图像的原点。两个视图子类都实现了相同的协议,因此我的AppDelegate不必知道它正在处理什么类型的视图。但是,每当我调用其中一个协议方法时,我都会收到一条警告:“找不到实例方法'-methodName'(返回类型默认为'id')”。我可以忽略警告或通过使用“performSelector:(@ selector(methodName :)”来调用协议方法来强制解决问题。

有什么我可以做(或应该做的)消除警告而不诉诸performSelector?

//FLAppDelegate.h
@interface FLAppDelegate : NSObject <NSApplicationDelegate>
{
    ...
    IBOutlet id _formImageView;  //type is FLPDFView* or FLImageView*
    …
}

//FLFormImageProtocol.h
@protocol FLFormImageProtocol <NSObject>
@required
- (void)        methodName;
@end

//FLPDFView.h
@interface FLPDFView : PDFView <FLFormImageProtocol>
@end

//FLImageView.h
@interface FLImageView : NSImageView <FLFormImageProtocol>
@end

1 个答案:

答案 0 :(得分:3)

使用协议键入实例变量:

IBOutlet id<FLFormImageProtocol> _formImageView;