2010-05-17 31 views
8

Analogamente a Ben Gottlieb's question, ho una manciata di chiamate obsolete che mi infastidiscono. C'è un modo per sopprimere gli avvertimenti per linea? Per esempio:Soppressione degli avvertimenti del compilatore XCode specifici della linea

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

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

Tutto quello che mi interessa è quella linea. Non voglio disattivare tutti gli avvisi di deprecazione. Preferirei anche non fare qualcosa come suppress specific warnings by file.

Ci sono state alcune altre circostanze in cui ho voluto contrassegnare una linea specifica come ok anche se il compilatore genera un avvertimento. In sostanza, voglio far sapere al mio team che il problema è stato gestito e smettere di ricevere bug sulla stessa linea più e più volte.

risposta

5

Vincent Gable ha pubblicato una soluzione interessante. In breve:

@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

Cool. Immagino che funzioni per schivare gli avvertimenti di deprecazione. La domanda più astratta è ancora aperta, comunque. C'è un modo per sopprimere un avvertimento specifico in XCode? – MrHen

+1

Sfortunatamente, è principalmente tutto o niente. Attraverso l'uso di '#pragma GCC diagnostic ...' (http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html), è possibile disabilitare un avvertimento specifico su una base per file in un altro modo ovvio rispetto alle impostazioni di generazione per-file. Richiede GCC 4.2+ e deve essere collocato nella parte superiore di un'unità di traduzione. –

+1

@ matt-b FYI, penso di aver trovato un modo migliore per gestire gli avvisi di deprecazione. Se lancio UIApplication su (id), l'errore scompare. Riesci a pensare a una ragione per cui è improprio? – MrHen

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

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