我正在尝试使用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对象来捕获这些对象。但是,当我尝试运行时,它崩溃了,并得到关于向下转换的错误。
编辑时出现错误
无法将类型'XXX.DisplayViewController‘(0x1082dcd80)的值强制转换为'XXX.VehicleDetailsTableViewController’(0x1082dc9a0)。(lldb)
发布于 2015-07-01 22:54:58
您必须在故事板中为segue指定一个标识符(比如mySegue
)。
使用Xcode10 swift 4.x的(也适用于Xcode9&8,swift 3.x)
override func prepare(for segue: UIStoryboardSegue, sender: Any?){}
从当前UIViewController
调用的所有segues都会调用。因此,identifier
是为了区分不同的序列
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
}
}
如果您使用的是Xcode7、swift 2.x,则使用
然后使用以下代码:
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
}
}
}
在nextScene
之后放置一个断点,并查看是否通过单击TableView
中的任何单元格触发该断点。如果不是,那么在故事板中提供的标识符名称u一定不同于这里给出的名称。
发布于 2016-08-24 07:27:41
在swift 3.0 Xcode 8 beta 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
}
}
}
发布于 2017-05-18 16:27:58
在Swift 3中,Xcode 8
只要不使用“标识符”即可。我不知道为什么,但"segue.identifier“总是为零。我就像这样使用了prepare方法,并且工作了!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let secondController = segue.destination as? SecondController {
secondController.anyItemInSecondController = self.anyItemInFirstController
}
https://stackoverflow.com/questions/31164654
复制相似问题