不推荐使用xcode中的警告以及如何处理弃用

if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];} //post-iOS6.0 else {[self dismissModalViewControllerAnimated:YES];} //pre-iOS6.0 

我正在做响应select器(上面)代码来处理不推荐使用的方法。 这样,我的应用程序是与旧版本的iOS兼容,但我在我的代码中收到警告,声明:“'dismissModalViewControllerAnimated:'已弃用:在iOS 6.0中不推荐使用”我个人不喜欢我的代码中的任何警告,但更重要的是,我在某处读到苹果会抱怨代码中的警告。

1)苹果是否会抱怨代码中的警告?

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

3)是否有办法将废弃的方法方法警告closures?

  1. 苹果公司并不知道你用代码收到的任何编译时警告。

  2. 是的,你正在正确地处理这种做法。 很明显,在这种情况下,如果您在5.0之前支持iOS,则只需要经过这个努力即可。 但是,一般来说,testing一个方法是否可以被调用然后调用适当的再现的技术是绝对正确的。

  3. 如果您想closures警告,则只需暂时禁止警告,然后使用适当的#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代码是你的特定警告,去你的日志导航器,select最近的build设,包括警告,并展开日志,你会看到它:

    在这里输入图像说明

另外请注意,虽然你可以像上面所说的那样禁止警告,但在实践中,你很less需要这样做。 使用你的例子,如果你的项目的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 
  1. 没有
  2. 您应该使用最新的方法,除非您专门尝试支持旧的iOS版本,那么您应该使用上面概述的方法。 “被淘汰的方法已被取代,未来可能会变得不受支持。”
  3. 如果将应用程序目标中的部署目标更改为5.0,则不推荐使用的iOS 5警告将显示为错误。

如果您真的对向后兼容感兴趣,那么Ray Wenderlich 在这里有一个很好的教程

是许多警告是出席和解散视图模式修复该replace:

在ios 6中,这些是:

  1. [self dismissViewControllerAnimated:NO completion:nil];

  2. [self presentViewController:vc animated:NO completion:nil];