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
答案 0 :(得分:3)
使用协议键入实例变量:
IBOutlet id<FLFormImageProtocol> _formImageView;