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

时间:2013-09-01 01:44:46

标签: 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)是否可以关闭弃用的方法方法警告?

3 个答案:

答案 0 :(得分:19)

  1. Apple不知道您使用代码收到的任何编译时警告。

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

  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

  4. 另请注意,虽然您可以像我上面所说的那样抑制警告,但在实践中,您很少需要这样做。使用您的示例,如果您的项目的iOS部署目标是4.3,则不会收到警告。如果你的部署目标是6.0或更高,你会收到警告,但是再一次,你可能不需要这个条件代码来调用dismissModalViewControllerAnimated,因为有效的iOS 5.0,你总是可以使用{{1} }。

    您需要在代码中禁止此警告的唯一情况是,如果您有源代码,将来要包含在项目中,您不知道部署目标是什么。使用您的示例,如果您不知道上述代码是否将包含在具有4.3部署目标或5.0+部署目标的项目中。在这种情况下,这种语法非常有用。但是,再一次,我还可以在dismissViewControllerAnimated上使用条件检查,例如:

    __IPHONE_OS_VERSION_MIN_REQUIRED

答案 1 :(得分:1)

  1. 没有
  2. 除非您专门尝试支持旧的iOS版本,否则您应该使用最新的方法,然后您应该使用上面概述的方法。 “被识别为已弃用的方法已被取代,将来可能会得不到支持。”
  3. 如果将应用程序目标中的部署目标更改为5.0,则iOS 5的已弃用警告不会显示为错误。
  4. 如果你真的对向后兼容感兴趣,Ray Wenderlich有一个很棒的教程here

答案 2 :(得分:0)

是许多警告存在并以模态方式解除视图以修复替换:

在ios 6中这些是: -

  1. [self dismissViewControllerAnimated:NO completion:nil];

  2. [self presentViewController:vc animated:NO completion:nil];