ios - 使用 prepareForSegue Swift 传递对象

标签 ios xcode swift storyboard uistoryboard

我正在尝试使用 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/

相关文章:

ios - 在执行方法而不是新 View Controller 的 UITabBar 上添加选项卡

ios - 导航栏重叠信息

ios - MFMailComposeViewController 不会关闭 (iOS10)

ios - Swift 中的类初始值设定项?

ios - iOS 上 iBeacon 的首选用例?

ios - 应用程序给出 SIGBART 并声称打开特定 View 时数组索引不存在,然后崩溃

iOS崩溃: MTLRenderPassDescriptor null after rotation

ios - NSOperationQueue 中的 dispatch_after 等价物

objective-c - Objective-C : Scrolling multiple XIB

iphone - iOS 应用程序仅在第一次使用该应用程序时发送警报 View