2010-05-17 11 views
8

Similar a Ben Gottlieb's question, tengo un puñado de llamadas en desuso que me están molestando. ¿Hay alguna manera de suprimir las advertencias por línea? Por ejemplo:Suprimir advertencias de compilador XCode específicas de línea

if([[UIApplication sharedApplication] 
    respondsToSelector:@selector(setStatusBarHidden:withAnimation:)]) { 

    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 
} else { 
    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]; //causes deprecation warning 
} 

Todo lo que me importa es esa línea. No quiero desactivar todas las advertencias de depreciación. También preferiría no hacer algo como suppress specific warnings by file.

Hubo algunas otras circunstancias en las que quise marcar una línea específica como aceptable aunque el compilador genera una advertencia. Básicamente quiero dejarle saber a mi equipo que el problema se ha manejado y dejar de recibir micrófonos sobre la misma línea una y otra vez.

Respuesta

5

Vincent Gable ha publicado una solución interesante. En resumen:

@protocol UIApplicationDeprecatedMethods 
- (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated; 
@end 

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden:withAnimation:)]) { 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 
} else { 
    id<UIApplicationDeprecatedMethods> app = [UIApplication sharedApplication]; 
    [app setStatusBarHidden:YES animated:NO]; 
} 
+0

fresca. Supongo que eso funciona para esquivar las advertencias de desaprobación. La pregunta más abstracta aún está abierta, sin embargo. ¿Hay alguna manera de suprimir una advertencia específica en XCode? – MrHen

+1

Lamentablemente, es sobre todo todo o nada. Mediante el uso de '#pragma GCC diagnostic ...' (http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html), puede desactivar una advertencia específica por archivo en un manera obvia que la configuración de compilación por archivo. Requiere GCC 4.2+, y debe colocarse en la parte superior de una unidad de traducción. –

+1

@ matt-b FYI, creo que encontré una mejor manera de lidiar con las advertencias de desaprobación. Si lanzo UIApplication a (id), el error desaparece. ¿Puedes pensar en una razón por la cual esto es incorrecto? – MrHen

0
if([[UIApplication sharedApplication] 
    respondsToSelector:@selector(setStatusBarHidden:withAnimation:)]) { 

    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 
} else { 
    [(id)[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]; 
} 
Cuestiones relacionadas