2009-09-25 15 views
12

Tengo una llamada como esta [Método de clase] y una advertencia que dice que Class no puede responder al mensaje de "método".¿Cómo deshabilitar la advertencia en xcode en una línea específica?

El mensaje "método" no existe, pero mi código utiliza un mensaje desconocido capturando (usando forwardingTargetForSelector) por lo que se ejecutará correctamente y se compilará para ejecutarse de esa manera. ¿Cómo puedo ocultar esta advertencia molesta?

Respuesta

16

Si tiene intención de enviar un mensaje, posiblemente, sin aplicarse a un objeto, y sabes que vas a coger fallos, se debe utilizar la invocación:

id myClone = [anObject performSelector:@selector(copy)]; 

que declara su intención más directa es que está llamando a un método que puede no existir, y está de acuerdo con eso. Esta es una forma más clara de hacerlo que suprimir la advertencia o falsificar el método.

+0

Gracias. Supongo que sería menos eficiente si tuviera que crear un selector en cada llamada. A menos que declare todo mi @selector uno y para todos. – CodeFlakes

+1

La diferencia de rendimiento será virtualmente indetectable. Si estás preocupado, perfúralo. No optimice prematuramente. –

+2

'performSelector' solo funciona para los métodos cuyos tipos de argumento y tipo de retorno son todos los objetos; y que solo tienen 0, 1 o 2 argumentos – user102008

3

Puede definir una categoría que declare ese método. Tener la definición en el alcance en el momento de la compilación evitaría la advertencia. Algo así como

@interface MyClass (ShutUpTheCompilerMethods) 
- (void)method; 
@end 

... 

[MyClass method] //no warning here 
Cuestiones relacionadas