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)苹果会提示您的代码中的警告吗?

2)我可以正确处理不赞成使用的方法吗?

3)有没有办法关闭过时的方法警告?

最佳答案

  • Apple不知道您使用代码收到的任何编译时警告。
  • 是,您正在正确处理此做法。显然,在这种情况下,仅在支持5.0之前的iOS时才需要进行此工作。但是,总的来说,用于测试某个方法是否可以被调用然后调用适当的再现的技术是绝对正确的。
  • 如果要关闭警告,只需暂时取消警告,然后再使用适当的#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代码是什么,请转到“日志导航器”,选择包含警告的最新版本,然后展开日志,您将在此处看到它:


  • 还要注意,虽然您可以像上面说明的那样抑制警告,但实际上,您很少需要这样做。以您的示例为例,如果项目的iOS部署目标为4.3,则不会收到警告。而且,如果您的部署目标是6.0或更高版本,则会收到该警告,但是再次提醒您,由于有效的iOS 5.0,您可能不需要此条件代码来调用dismissModalViewControllerAnimated,则始终可以使用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/

    10-12 14:49
    查看更多