Comprobación para ver si se ha implementado un método de protocolo facultativo


¿Conoce alguien la mejor manera de verificar si se ha implementado un método de protocolo facultativo?

He intentado esto:

if ([self.delegate respondsToSelector:@selector(optionalProtocolMethod:)] )

Donde está el delegado:

id<MyProtocol> delegate;

Sin embargo, me sale un error diciendo que la función respondsToSelector: no se encuentra en el protocolo!

Author: Bobrovsky, 2009-02-04

2 answers

respondsToSelector: forma parte del protocolo NSObject. Incluir NSObject en MyProtocol debería resolver tu problema:

@protocol MyProtocol <NSObject>

@optional
-(void)optionalProtocolMethod:(id)anObject;

@end
 99
Author: Will Harris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-04 18:23:39

Lo que hago es aplicar la siguiente receta:

if(self.delegate && [self.delegate respondsToSelector:@selector(closed)]){
    [self.delegate closed];
}

Donde 'closed' es el método al que quería llamar.

 3
Author: Javier Calatrava Llavería,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-10 07:01:33