2010-05-17 48 views
8

Ben Gottlieb's question类似,我有一些不赞成使用的调用正在扰乱我。有没有办法通过行压制警告?例如:抑制行特定的XCode编译器警告

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

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

所有我关心的是这条线。我不想关闭全部弃用警告。我宁愿不做类似suppress specific warnings by file

还有一些其他情况下,即使编译器生成警告,我想标记特定的行也没关系。我基本上想让我的团队知道这个问题已经处理完毕,并且不再一遍又一遍地听到同一条线路。

回答

5

Vincent Gable发布了一个有趣的解决方案。总之:

@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

酷。我想这可以避免弃用警告。然而,更抽象的问题仍然是开放的。有没有办法在XCode中抑制特定的警告? – MrHen 2010-05-18 16:58:16

+1

不幸的是,它大部分是全部或没有。通过使用'#pragma GCC diagnostic ...'(http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html),您可以在每个文件的基础上禁用特定的警告比每个文件的构建设置明显。它确实需要GCC 4.2+,并且必须放置在翻译单元的最顶端。 – 2010-05-18 17:48:42

+1

@ matt-b FYI,我想我找到了一个更好的方法来处理弃用警告。如果我将UIApplication转换为(id),则错误消失。你能想到这个不合适的原因吗? – MrHen 2010-05-24 16:06:25

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

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