2

NSViewサブクラスに次のコードがあります。

- (id)forwardingTargetForSelector:(SEL)aSelector
{
    if ([super respondsToSelector:@selector(forwardingTargetForSelector:)]) {
        // cast to (id) to avoid "may not respond to selector" warning
        return [(id)super forwardingTargetForSelector:aSelector];
    } else {
        [self doesNotRecognizeSelector:aSelector];
        return nil;
    }
}

最初の行では、GCCコンパイラの下で、このような回答で示唆されているように、スーパークラス(NSView)が応答しない可能性があるという警告を抑制したためにreturn [(id)super ...キャストsuperします。idforwardingTargetForSelector:

ただし、LLVMコンパイラに切り替えると、「スーパーをキャストできません」というエラーが発生します。LLVMとGCCの両方で警告もエラーも表示されないようにコードを変更する正しい方法はありますか?

4

1 に答える 1

7

実装ファイルのインターフェイスのみのカテゴリでセレクタを宣言します。

@interface NSView (FastForwarding)

- (id) forwardingTargetForSelector:(SEL)selector;

@end
于 2010-12-17T20:38:38.390 に答える