destination ios xcode swift storyboard uistoryboard

ios - segue destination swift 4



Pasando objeto con prepareForSegue Swift (4)

Estoy tratando de pasar un objeto a otra escena con 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 } }

Y tengo objeto currentVehicle para atrapar estos objetos. Pero, cuando intento ejecutarlo, se rompe y aparece un error acerca de la reducción.

Error EDIT

No se pudo convertir el valor de tipo ''XXX.DisplayViewController'' (0x1082dcd80) en ''XXX.VehicleDetailsTableViewController'' (0x1082dc9a0). (lldb)


En swift 3.0 Xcode 8 beta 6

AnyObject ha cambiado el nombre de AnyObject a 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 } } }


En Swift 3, Xcode 8

Simplemente no use "identificador". No sé por qué pero "segue.identifier" siempre es nulo. ¡Acabo de usar el método de preparación como este y funciona!

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


Lo que te dice ese error es que segue.destinationViewController no es un VehicleDetailsTableViewController. No tenemos suficientes detalles para decirte por qué.

Revise sus segmentos y asegúrese de que todos apunten al lugar correcto, y siempre verifique el identificador de su segmento antes de realizar un lanzamiento.

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


Tienes que dar un identificador al mySegue en el guión gráfico (por ejemplo, mySegue )

Usando Xcode 10 swift 4.x (También funciona con Xcode 9 y 8, swift 3.x)

override func prepare(for segue: UIStoryboardSegue, sender: Any?){}

Se llama para todos los segmentos que se llaman desde su UIViewController actual. Así que el identifier es diferenciar los distintos segues.

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 } }

Si está utilizando Xcode 7, swift 2.x

Entonces usa este código:

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 } } }

Coloque un punto de interrupción después de nextScene y vea si se está TableView haciendo clic en cualquier celda en el TableView . Si no es así, entonces el nombre de identificador u proporcionado en el guión gráfico debe ser diferente del que se proporciona aquí.