5

在我的应用程序中,我需要展示一个视图控制器。呈现视图控制器的 6.0 方法是 presentViewController:animated:completion:。我也想支持4.3。4.3中要调用的方法是presentModalViewController:animated:。所以我使用 respondsToSelector: 来查明该方法是否被支持。但是当我为 6.0 编译应用程序时,它会给出警告消息

presentModalViewController:animated: 已弃用:在 iOS 6.0 中首次弃用

谁能知道如何摆脱这个警告。我也没有 4.3 设备来测试它是否有效。我需要假设我编写的代码应该适用于 4.3。

  if([myViewController respondsToSelector:@selector(presentModalViewController:animated:)]){
      [myViewController presentModalViewController:anotherViewController animated:YES];
  }else{
      [myViewController presentViewController:anotherViewController animated:YES completion:nil];
  }
4

3 回答 3

3

您可以进行相反的检查,因为respondsToSelector它可能会有所帮助,如果您支持旧版本,这实际上是要走的路:)

if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
    [self presentViewController:anotherViewController animated:YES completion:nil];
} else {
    [self presentModalViewController:anotherViewController animated:YES];
}
于 2013-03-06T15:58:11.550 回答
1

您可以在代码中启用/禁用带有编译指示的警告,但它们使用起来不是很友好。而且我不记得这种警告的具体编译指示。但是这里有些人会告诉你。

顺便说一句,您可以使用一个简单的

[id performSelector:<#(SEL)#> withObject:<#(id)#>]

会成功的

于 2013-03-06T16:02:09.710 回答
0

我错误地将部署目标设置为 6.0。所以它显示了上面提到的警告信息。将部署目标更改为 4.3(我需要支持)后没有警告消息。感谢您的回答!

于 2013-03-07T06:33:51.697 回答