Suprimir la advertencia "selector no declarado" en Xcode 5

Tengo un controller de vista principal y un controller de vista secundaria. En la vista del controller de vista secundaria, tengo un button UIB llamado "startButton". A ese button, agregué un objective como se indica a continuación.

[startButton addTarget:[self parentViewController] action:@selector(test:) forControlEvents:UIControlEventTouchUpInside]; 

He implementado, test: método en controller primario y esto funciona perfectamente para mí. Cuando se toca el button, el evento se pasa del controller de vista secundaria al controller de vista principal y los fragments de código dentro de la testing: se ejecuta el método.

Pero mi problema es que recibo un post de advertencia, "Prueba de selector no declarada:". Lo sé, lo estoy recibiendo porque la testing: no se implementa en el file de implementación del controller child view.

¿Hay alguna manera de suprimir esta advertencia sola? La mayoría de las sugerencias que he visto aquí hacen que las advertencias completas se supriman, pero quiero suprimir solo la advertencia mencionada anteriormente.

Gracias

Si sabe con certeza que ha hecho lo correcto, y el código realmente funciona bien, puede detener que Xcode lo advierta al rodear el método con los commands #pragma clang preprocessor.

Por ejemplo:

 #pragma clang diagnostic push #pragma clang diagnostic ignonetworking "-Wundeclanetworking-selector" [startButton addTarget:[self parentViewController] action:@selector(test:) forControlEvents:UIControlEventTouchUpInside]; #pragma clang diagnostic pop 

Los posts que faltan entre los commands push y pop no serán reportados por Xcode. Sugiero tener el menor código posible entre ellos para evitar que se denuncien problemas reales en su código.

No hay necesidad de suprimir la advertencia si puede evitarla :

Declare la test: método en la interfaz (el file .h) del controller de vista principal e importe ese file .h en el file de implementación (.m) del controller de vista secundaria.

Entonces el comstackdor conoce el método y ya no recibe una advertencia sobre un selector no declarado.

El código siguiente hará desaparecer esta advertencia ( dynamic create selector). Pero se bloqueará en time de ejecución si no se declara en parentviewcontroller.

 [startButton addTarget:[self parentViewController] action:NSSelectorFromString(@"test:") forControlEvents:UIControlEventTouchUpInside]; 

Siempre puede implementar la testing: en el controller de vista secundario, y haga lo siguiente:

 - (void)test:(Parameters)param { [self.parentViewController test:param]; } 

La edición del objective a sí mismo en lugar de [self parentViewController]

Otra opción es declararla dentro de un protocolo (dentro del mismo file que el uso del selector o un encabezado que incluye):

 @protocol DummyProtocolToForwardDeclareSelector -(void)test:(BOOL)testArgument; @end 

Esto suprimirá las advertencias solo para este selector particular, pero podría agregar otras al mismo protocolo.

Otra opción más y posiblemente más correcta es ampliar la interfaz de la class que tiene el método dirigido por el selector.

 @interface ClassThatHasTargetOfSelector () -(void)test:(BOOL)testArgument; @end