Ios showViewController不工作

Ios showViewController不工作,ios,xcode,swift,xcode6,Ios,Xcode,Swift,Xcode6,我正在SWIFT中开发一个应用程序,我正在使用以下代码在单击按钮时显示视图控制器 let storyboard = UIStoryboard(name: "Main", bundle: nil); var viewName:NSString = "websiteView" let vc = storyboard.instantiateViewControllerWithIdentifier(viewName) as WebsiteViewController self.showViewContr

我正在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 Throw[80595:613]***由于未捕获的异常“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 { }

可能的原因是编译器不知道代码将在哪个设备上运行,您可以在运行时检查函数是否存在。。。那会是什么呢?是否有相同功能的iOS7版本?根据您的意图和设置,可以使用presentViewController、[self.navigationController pushViewController]等。