2013-03-06 51 views
5

在我的应用程序中,我需要提供一个视图控制器。呈现视图控制器的6.0方法是presentViewController:animated:completion :.我也想支持4.3。在4.3中,要调用的方法是presentModalViewController:animated :.所以我使用respondsToSelector:来确定该方法是否受支持。但是,当我编译应用程序6.0它给警告消息iOS版本检查给出警告

presentModalViewController:动画:被弃用:在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]; 
    } 
+1

忽略该警告或抑制它:http://stackoverflow.com/a/4133201/427309 – 2013-03-06 16:07:46

回答

3

你可以做检查相对来说respondsToSelector它可能会帮助,这是实际去,如果你是支持旧版本:)

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

您可以启用/禁用警告与编译进路你的代码,但他们不是很友好的使用。我不记得这种警告的具体编译。但是这里有些人会告诉你。

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

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

会做的伎俩

+0

它是一个运行时绑定,比普通调用需要更多的时间。 – Apurv 2013-03-06 16:07:19

+2

@Apurv no,'-performSelector:'通常和正常方法调用一样快 - 它全部编译为'objc_msgSend'。 – 2013-03-06 16:09:56

+1

objc_msgSend由编译器生成,用于执行:作为直接消息。唯一不同的是它不是由编译器检查的类型。这是saika想要的。绑定总是动态完成的。 – 2013-03-06 16:17:12

0

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