当前位置: 首页 > 面试题库 >

使用prepareForSegue Swift传递对象

蒋嘉实
2023-03-14
问题内容

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


问题答案:

您必须在情节提要中为segue提供标识符(例如mySegue)。

使用Xcode 10 swift 4.x(也适用于Xcode 9和8,swift 3.x)

override func prepare(for segue: UIStoryboardSegue, sender: Any?){}

被要求从您当前调用的所有segues UIViewController。所以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
    }
}

如果使用的是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。如果不是,那么情节提要中提供的标识符名称u必须与此处指定的标识符名称不同。



 类似资料:
  • 问题内容: 我试图将对象从我的应用程序委托传递到另一个类的通知接收器。 我想传递整数。现在我有: 在接收器中: 在执行通知的类中: 但是我想将对象传递给另一个类。 问题答案: 您必须使用“ userInfo”变体,并传递一个包含messageTotal整数的NSDictionary对象: 在接收端,您可以按以下方式访问userInfo字典:

  • 我需要在rmi服务器中调用一个方法,并从客户端将一个序列化对象传递给该方法,但该对象的类对于服务器来说是未知的

  • 问题内容: 是否可以使用addJavascriptInterface()将JavaScript对象从JavaScript传递到Java?遵循以下原则: 在Java端如何捕获这样的调用?我将接口设置为发送字符串没有问题,但是当我发送对象时,在Java端会收到null。 问题答案: AFAIK 仅适用于基本类型和字符串,因此您不能传递任意Javascript对象。

  • 我需要修改下面的代码,以使用循环与常规foreach循环。 我遇到的问题是将对象传递给foreach循环。我刚开始使用循环-有没有人对此有一些信息? 当前代码 问题是列表将包含3000+项,循环将循环每一项,我需要并行地运行它们。 因此,我想使用函数,但我无法通过传递对象来使其工作。

  • 问题内容: 我正在考虑我的应用程序的解决方案。这是一种情况:我有一个类,该类的方法将ObjectA作为输入参数并调用几个小方法,这些方法中的每个方法都需要ObjectA的某些部分(它们不重叠,即需求和,需求等等)。 …)现在的问题是:鉴于一般的良好代码实践和性能,将ObjectA传递给这些方法中的每一个方法更好,以便它们可以自己提取所需的值,还是仅传递它们的值更好?我的意思是: 要么 感谢您的任何

  • 我一直在按照创建 POSIX 线程的说明进行操作,并密切关注他们的示例 Pthread 创建和终止。 根据他们的示例,他们将一个整数值传递给,这将导致类似于以下内容的调用: 我要运行的代码的草图是: 这是在一个作业的上下文中,老师希望我们在Linux中使用gcc,所以我使用Windows子系统来Linux这些编译参数: 运行上述程序将输出“线程值:42”。 我的 C 指针体验已经过去了几年,但只是