showViewController不工作

我正在SWIFT开发一个应用程序,我使用以下代码在按钮单击时显示视图控制器。

let storyboard = UIStoryboard(name: "Main", bundle: nil); var viewName:NSString = "websiteView" let vc = storyboard.instantiateViewControllerWithIdentifier(viewName) as WebsiteViewController self.showViewController(vc, sender: self) 

当我为ios 8进行测试时,它可以正常工作,但在ios 7上,无论我做什么,我都会收到以下错误消息。 我在一个论坛上看到self.showViewController仅适用于ios 8,但编译器不会抛出错误,是否有人知道我是否可以使用它?

 showViewController:sender:]: unrecognized selector sent to instance 0x7f9552e7cc50 

2014-11-15 09:25:49.565抛出[80595:613] ***由于未捕获的exception’NSInvalidArgumentException’终止应用程序,原因:’ – [Throw.test showViewController:sender:]:无法识别的选择器发送到实例0x7f9552e7cc50′

编译器没有抛出错误,因为您选择了iOS 8.0(或8.1)SDK。 该方法确实只是iOS 8.0+。 如果你有条件地调用它,你可以选择使用它,如下所示:

 if (self.respondsToSelector(Selector("showViewController"))) { self.showViewController(vc, sender: self) } else { //An example of the alternate if you are using navigation controller self.navigationController?.pushViewController(vc, animated: true) } 

您可以使用:

 self.navigationController?.pushViewController(vc as WebsiteViewController, animated: true) 

与iOS 7和iOS 8兼容

更新 – 来自swift2的更好和推荐的API版本兼容性检查方法

 if #available(iOS 8, *) { self.showViewController(vc, sender: self) } else { self.navigationController?.pushViewController(vc, animated: true) } 

额外:使用@available属性来装饰单个函数或整个类,这将为您自己的API提供编译时版本检查

 @available(iOS 8, *) func compatibalityCheckForiOS8() -> Void { }