Tengo un objeto (un UIViewController) que puede o no cumplir con un protocolo que he definido.
Sé que puedo determinar si el objeto se ajusta al protocolo, luego llamar de forma segura al método:
if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
[self.myViewController protocolMethod]; // <-- warning here
}
Sin embargo, XCode muestra una advertencia:
warning 'UIViewController' may not respond to '-protocolMethod'
¿Cuál es la forma correcta de prevenir esta advertencia? Parece que no puedo elegir self.myViewController
como MyProtocol
clase.
fuente
id<MyProtocol> p = (id<MyProtocol>)self.myViewController;
esta respuesta y @andys son correctas, pero la suya es más correcta.UIViewController
quevc
en el ejemplo de mi respuesta, y se declara comoid <MyProtocol>
?id
es un problema: gist.github.com/nsforge/7743616Puedes lanzarlo así:
Esto también me desconcertó un poco. En Objective-C, el protocolo no es el tipo en sí, por lo que debe especificar
id
(o algún otro tipo, comoNSObject
) junto con el protocolo que desea.fuente
(id)
funciona. ¿Es eso de mala forma?