我正在尝试使用 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 对象来捕获这些对象。但是,当我尝试运行时,它崩溃了并出现关于向下转换的错误。
错误编辑
Could not cast value of type 'XXX.DisplayViewController' (0x1082dcd80) to 'XXX.VehicleDetailsTableViewController' (0x1082dc9a0). (lldb)
最佳答案
你必须在 Storyboard中给 segue 一个标识符。(比如 mySegue
)
使用 Xcode 10 swift 4.x(也适用于 Xcode 9 & 8,swift 3.x)
override func prepare(for segue: UIStoryboardSegue, sender: Any?){}
为从您当前的 UIViewController
调用的所有 segue 调用。所以identifier
是为了区分不同的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
}
}
如果您使用的是 Using Xcode 7, 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
中的任何单元格触发断点。如果不是,那么您在 Storyboard 中提供的标识符名称必须与此处给出的不同。
关于ios - 使用 prepareForSegue Swift 传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31164654/