Избегайте предупреждения «[суперкласс] может не отвечать на [селектор]» без возникновения ошибки LLVM «Can't cast 'super'» - PullRequest
2 голосов
/ 17 декабря 2010

У меня есть следующий код в подклассе 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;
    }
}

В первой строке return [(id)super ... приводит super к id, потому что в компиляторе GCC это подавило предупреждение о том, что суперкласс (NSView) может не отвечать на forwardingTargetForSelector:, как предлагается в ответах такие как этот .

Однако, когда я переключаюсь на компилятор LLVM, это приводит к ошибке «Can't cast super». Есть ли правильный способ изменить мой код, чтобы я не получил ни предупреждение, ни ошибку ни в LLVM, ни в GCC?

1 Ответ

7 голосов
/ 17 декабря 2010

Объявите селектор в категории только для интерфейса в вашем файле реализации.

@interface NSView (FastForwarding)

- (id) forwardingTargetForSelector:(SEL)selector;

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...