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)是否可以关闭弃用的方法方法警告?
答案 0 :(得分:19)
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或更高,你会收到警告,但是再一次,你可能不需要这个条件代码来调用dismissModalViewControllerAnimated
,因为有效的iOS 5.0,你总是可以使用{{1} }。
您需要在代码中禁止此警告的唯一情况是,如果您有源代码,将来要包含在项目中,您不知道部署目标是什么。使用您的示例,如果您不知道上述代码是否将包含在具有4.3部署目标或5.0+部署目标的项目中。在这种情况下,这种语法非常有用。但是,再一次,我还可以在dismissViewControllerAnimated
上使用条件检查,例如:
__IPHONE_OS_VERSION_MIN_REQUIRED
答案 1 :(得分:1)
如果你真的对向后兼容感兴趣,Ray Wenderlich有一个很棒的教程here
答案 2 :(得分:0)
是许多警告存在并以模态方式解除视图以修复替换:
在ios 6中这些是: - [self dismissViewControllerAnimated:NO completion:nil];
[self presentViewController:vc animated:NO completion:nil];