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

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会在你的代码中抱怨警告吗?

我是否正确处理弃用的方法

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代码是针对特定警告的,请转到Log Navigator,选择包含警告的最近版本,然后展开日志,您将看到它:

还要注意,虽然你可以按照上面的说明来抑制警告,但实际上你很少需要这样做.使用你的例子,如果你的项目的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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...