用prepareForSegue Swift传递对象

我正在尝试通过prepareForSegue()将对象传递给另一个场景

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { // Get the new view controller using [segue destinationViewController]. var nextScene = segue.destinationViewController as! VehicleDetailsTableViewController // Pass the selected object to the new view controller. if let indexPath = self.tableView.indexPathForSelectedRow() { let selectedVehicle = vehicles[indexPath.row] nextScene.currentVehicle = selectedVehicle } } 

我有currentVehicle对象来捕捉这些对象。 但是,当我尝试运行时,它会导致向下转换错误。

错误编辑

无法将types“XXX.DisplayViewController”(0x1082dcd80)的值转换为“XXX.VehicleDetailsTableViewController”(0x1082dc9a0)。 (LLDB)

你必须给故事板上的一个标识符(比如mySegue

使用XCode 7,swift 2.x

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){....} 

被称为从当前UIViewController调用的所有segues。 所以鉴别是区分不同的阶段

然后使用这个代码:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "mySegue" { var nextScene = segue.destinationViewController as! VehicleDetailsTableViewController // Pass the selected object to the new view controller. if let indexPath = self.tableView.indexPathForSelectedRow { let selectedVehicle = vehicles[indexPath.row] nextScene.currentVehicle = selectedVehicle } } } 

使用Xcode 8,swift 3.x

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "mySegue" , let nextScene = segue.destination as? VehicleDetailsTableViewController , let indexPath = self.tableView.indexPathForSelectedRow { let selectedVehicle = vehicles[indexPath.row] nextScene.currentVehicle = selectedVehicle } } 

nextScene之后放置一个断点,看看它是否在点击TableView任何单元时被触发。 如果不是,那么故事板中提供的标识符名称必须与此处给出的名称不同。

在迅速3.0 Xcode 8testing版6

AnyObject已被重命名为Any?

 override func prepare(for segue: UIStoryboardSegue, sender: Any?){ let nextScene = segue.destinationViewController as! VehicleDetailsTableViewController // Pass the selected object to the new view controller. if let indexPath = self.tableView.indexPathForSelectedRow { let selectedVehicle = vehicles[indexPath.row] nextScene.currentVehicle = selectedVehicle } } } 

那个错误告诉你的是,segue.destinationViewController不是一个VehicleDetailsTableViewController。 我们没有足够的细节来告诉你为什么。

检查你的赛段,并确保他们都指向正确的位置,并且在执行演员前总是检查你的赛格的标识符。

 if segue.identifier == "theNameOfYourSegue" // then do your cast 

在Swift 3中,Xcode 8

只是不要使用“标识符”。 我不知道为什么,但“segue.identifier”总是零。 我只是用这样的准备方法和工作!

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let secondController = segue.destination as? SecondController { secondController.anyItemInSecondController = self.anyItemInFirstController }