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)有没有办法关闭过时的方法警告?
最佳答案
#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/