开发者

Avoid "[superclass] may not respond to [selector]" warning without incurring LLVM's "Cannot cast 'super'" error

I have the following code in an NSView subclass:

- (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 doesNot开发者_StackOverflow社区RecognizeSelector:aSelector];
        return nil;
    }
}

In the first line, return [(id)super ... casts super to id because under the GCC compiler, this suppressed the warning that the superclass (NSView) may not respond to forwardingTargetForSelector:, as suggested in answers such as this one.

However, when I switch to the LLVM compiler, this results in a "Cannot cast super" error. Is there a correct way to modify my code so that I get neither the warning nor the error under both LLVM and GCC?


Declare the selector in an interface-only category in your implementation file.

@interface NSView (FastForwarding)

- (id) forwardingTargetForSelector:(SEL)selector;

@end
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜