用prepareForSegue Swift传递对象 [英] Passing object with prepareForSegue Swift
问题描述
我正在尝试将对象传递给另一个场景 prepareForSegue()
I am trying to pass an object to another scene with 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对象来捕获这些对象。但是,当我试图运行时,它会破坏并获得有关向下转换的错误。
And I have currentVehicle object to catch these object. But, when I try to run, it brokes and get error about downcasting.
错误编辑
无法将'XXX.DisplayViewController'
(0x1082dcd80)类型的值转换为'XXX.VehicleDetailsTableViewController'
(0x1082dc9a0)。 (lldb)
Could not cast value of type 'XXX.DisplayViewController' (0x1082dcd80) to 'XXX.VehicleDetailsTableViewController' (0x1082dc9a0). (lldb)
推荐答案
你必须在故事板中给segue一个标识符。 mySegue
)
You have to give the segue an identifier in the storyboard.(say mySegue
)
使用XCode 7,swift 2.x
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){....}
调用从当前 UIViewController
调用的所有segue。所以标识符
用于区分不同的segue
Is called for all segues being called form your current UIViewController
. So the identifier
is to differentiate the different 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 9,swift 4.x(也适用于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
中的任何单元格触发。如果不是,那么故事板中提供的标识符名称必须与此处给出的名称不同。
Place a breakpoint after nextScene
and see if it is being triggered by clicking any cell in the TableView
. If it isn't then the identifier name u provided in the storyboard must be different then the one given here.
这篇关于用prepareForSegue Swift传递对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!