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) 有没有办法关闭不推荐使用的方法方法警告?
最佳答案
Apple 不知道您在代码中收到任何编译时警告。
是的,您正确地处理了这种做法。显然,在这种情况下,如果您支持 iOS 5.0 之前的版本,则只需完成这项工作。但是,一般来说,测试方法是否可以被调用然后调用适当的再现的技术是绝对正确的。
如果您想关闭警告,您只需暂时取消警告,然后使用适当的
#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,您始终可以使用 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/