self.delegate responsesToSelector: … не компилируется

Я реализовал протокол с необязательным методом, и в вызывающем методе я хочу отправить respondsToSelector: на self.delegate, прежде чем отправлять сообщение, но оно не компилируется. Сообщение об ошибке:

Нет известного метода экземпляра для селектора «respondsToSelector» .

В качестве обходного пути я "дезинфицировал" делегата, как показано ниже, который компилирует...

//MyClass.h:

@class MyClass;

@Protocol MyClassDelegate
- (void)myClass:(MyClass *)sender willDoSomething:(BOOL)animated;
@end

@interface MyClass : UIViewController

@property (nonatomic, weak) id delegate;

@end

и

//MyClass.m:

...
@synthesize delegate = _delegate;
...

id sanitizedDelegate = self.delegate; //Hmmmm... why does this work?

if ([sanitizedDelegate respondsToSelector:@selector(myClass:willDoSomething:)]) {
    [self.delegate myClass:self willDoSomething:animated];
}

.

Я проверил ряд сообщений, включая этот , но он не решает проблему сбоя компиляции.

Также не работают альтернативные средства доступа...

[self delegate]
//or
_delegate

Кто-нибудь видел такое или может посоветовать лучший способ обработки?

IOS 5.0:(9A334), Xcode 4.2.1 (4D502)

33
задан Community 23 May 2017 в 10:29
поделиться