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í.