ios - xcode 中弃用的警告以及如何处理弃用

标签 ios ios6 warnings deprecated

if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)])
     {[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];} //post-iOS6.0
else {[self dismissModalViewControllerAnimated:YES];} //pre-iOS6.0

我正在执行对选择器(上述)代码的响应以处理已弃用的方法。这样我的应用程序与旧版本的 iOS 兼容,但我在代码中收到警告:“‘dismissModalViewControllerAnimated:’已弃用:在 iOS 6.0 中首次弃用” 我个人不喜欢我的代码中有任何警告,但更重要的是,我在某处读到苹果会提示你的代码中有警告。

1) Apple 会提示您代码中的警告吗?

2) 我是否正确处理过时的方法?

3) 有没有办法关闭不推荐使用的方法方法警告?

最佳答案

  1. Apple 不知道您在代码中收到任何编译时警告。

  2. 是的,您正确地处理了这种做法。显然,在这种情况下,如果您支持 iOS 5.0 之前的版本,则只需完成这项工作。但是,一般来说,测试方法是否可以被调用然后调用适当的再现的技术是绝对正确的。

  3. 如果您想关闭警告,您只需暂时取消警告,然后使用适当的 #pragma 语法将其重新打开:

    if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)])
    {
        //post-iOS6.0
        [self dismissViewControllerAnimated:YES completion:nil];
    } 
    else
    {
        // pre-iOS6.0
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
        [self dismissModalViewControllerAnimated:YES];
    #pragma clang diagnostic pop
    }
    

    顺便说一下,如果你想知道你的特定警告的 -W 代码是什么,请转到你的日志导航器,选择包含警告的最新版本,然后展开日志,你会在那里看到它:

    enter image description here

另请注意,虽然您可以像我上面说明的那样抑制警告,但在实践中,您很少需要这样做。使用您的示例,如果您的项目的 iOS 部署目标是 4.3,您将不会收到警告。如果您的部署目标是 6.0 或更高版本,您会收到该警告,但话又说回来,您可能不需要此条件代码来调用 dismissModalViewControllerAnimated 因为有效的 iOS 5.0,您始终可以使用 dismissViewControllerAnimated

唯一需要在您的代码中抑制此警告的情况是,如果您有源代码,将包含在未来的项目中,而您不知道部署目标是什么。使用您的示例,如果您不知道上述代码是否将包含在具有 4.3 部署目标或 5.0+ 部署目标的项目中。在那种情况下,这种语法非常有用。但是,话又说回来,我也可以对 __IPHONE_OS_VERSION_MIN_REQUIRED 使用条件检查,例如:

#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0
    if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)])
    {
        //post-iOS5.0
        [self dismissViewControllerAnimated:YES completion:nil];
    }
    else
    {
        // pre-iOS5.0
        [self dismissModalViewControllerAnimated:YES];
    }
#else
    [self dismissViewControllerAnimated:YES completion:nil];
#endif

关于ios - xcode 中弃用的警告以及如何处理弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18554449/

相关文章:

ios - 你如何在 Swift 中使用 MBProgressHUD CustomView/Determinate Loader?

iphone - 如何在iOS中取消推送通知

ios - NSLineBreakMode 枚举和向后兼容性

xcode - iOS 非仿射变换

warnings - VHDL 警告 Xst :1293 FF/Latch has a constant value of 0

ios - 在另一个上下文中更新核心数据实体

javascript - 在 iPad 上调试网站的有效策略

ios - UIButton 在 TableView 单元格中不可见

java - 如何在 Eclipse-Helios JDT 中专门抑制 "Comparing identical expressions"

C:什么时候考虑使用变量或值?