0

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

1 に答える 1

3

プロトコルを使用してインスタンス変数を入力します。

IBOutlet id<FLFormImageProtocol> _formImageView;
于 2012-12-18T19:21:38.203 に答える