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会在你的代码中抱怨警告吗?
我是否正确处理弃用的方法?
解决方法
> Apple不知道您的代码中收到的任何编译时警告.
是的,你正在正确地处理这个做法.显然,在这种情况下,如果您在5.0之前支持iOS,则只需要完成这项工作.但是,一般来说,用于测试方法是否可以被调用,然后调用适当的再现的技术是绝对正确的.
>如果要关闭警告,您只需暂时禁止警告,然后使用适当的#pragma语法将其重新打开:
是的,你正在正确地处理这个做法.显然,在这种情况下,如果您在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