【问题标题】:Suppressing line specific XCode compiler warnings抑制行特定的 XCode 编译器警告
【发布时间】:2011-02-20 15:27:26
【问题描述】:

类似于Ben Gottlieb's question,我有一些不推荐使用的调用困扰着我。有没有办法按行禁止警告?例如:

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

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

我只关心那条线。我不想关闭 all 弃用警告。我也不想做suppress specific warnings by file之类的事情。

在其他一些情况下,即使编译器生成警告,我也想将特定行标记为正常。我本质上是想让我的团队知道问题已经得到处理,并且不再被同一条线路一遍又一遍地窃听。

【问题讨论】:

    标签: objective-c iphone xcode compiler-warnings


    【解决方案1】:

    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];
    }
    

    【讨论】:

    • 酷。我想这可以避免弃用警告。然而,更抽象的问题仍然悬而未决。有没有办法抑制 XCode 中的特定警告?
    • 不幸的是,这主要是全有或全无。通过使用#pragma GCC diagnostic ... (gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html),您可以以比每个文件构建设置更明显的方式禁用每个文件的特定警告。它确实需要 GCC 4.2+,并且必须放在翻译单元的最顶部。
    • @matt-b 仅供参考,我想我找到了一种更好的方法来处理弃用警告。如果我将 UIApplication 转换为 (id) 错误就会消失。你能想出一个不恰当的原因吗?
    • @MrHen:是的,有时确实有效。当您发送 id 选择器时,编译器会检查以确保至少 some 类能够响应这样的选择器。不推荐使用的选择器可能并非总是如此。如果不是,则会发出未找到方法的警告。因此,添加协议是更健壮的解决方案;它总是会绕过警告。
    • 这对我有用,但我必须做一些改变。我的代码如下: id app = (id)[UIApplication sharedApplication];否则那行会给我一个警告。
    【解决方案2】:
    if([[UIApplication sharedApplication]
      respondsToSelector:@selector(setStatusBarHidden:withAnimation:)]) {
    
      [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
     } else {
      [(id)[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2019-04-19
      • 2015-04-13
      相关资源
      最近更新 更多