私の 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