准备 segue 传递数据 nil

Posted

技术标签:

【中文标题】准备 segue 传递数据 nil【英文标题】:Prepare for segue passing Data nil 【发布时间】:2020-10-16 10:33:51 【问题描述】:

我实际上没有更改任何代码,但在更新到 Xcode 12 后,准备 Segue 方法传递数据不再起作用。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "toDetails" 
        if let indexPath = sender as? IndexPath, let nextVC = segue.destination as? JobDetailViewController 
            nextVC.jobDetails =
                JobDetailViewController.JobDetails(jobDetail: jobs[indexPath.row].text, userName: jobs[indexPath.row].addedByUser!, jobImage: jobs[indexPath.row].jobImage, downloadURL: jobs[indexPath.row].downloadURL!)
        
    


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
   performSegue(withIdentifier: "toDetails", sender: indexPath.row)

详细VC:

var jobDetails: JobDetails?

struct JobDetails 
    var jobDetail: String
    var userName: String
    var jobImage: UIImage?
    var downloadURL: String?

(例如) 通过 print("Hello (jobDetails?.userName)") 我得到 "Hello nil" 作为输出

新的 Swift/Xcode 版本有什么改变吗? 我也没有收到任何错误/警告

【问题讨论】:

代码行是否被调用? ùnextVC.jobDetails?如果是,你能检查它是在`print("Hello (jobDetails?.userName)")`之前还是之后? 是的,我在之后调用打印语句:/ 【参考方案1】:

请看一下,您正在传递 Int 的 indexPath.row 并准备将其解析为 IndexPath。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
       performSegue(withIdentifier: "toDetails", sender: indexPath)
    

【讨论】:

哇,就是这样......老兄非常感谢你,你真的为我节省了大量时间,上帝保佑你,我的朋友

以上是关于准备 segue 传递数据 nil的主要内容,如果未能解决你的问题,请参考以下文章

将数据从模态 segue 传递给父级

使用 performSegueWithIdentifier 传递数据 nil

为 segue 做准备,传递数据

UICollectionView 控制器和在准备 Segue 中传递 CloudKit 数据

UIImageView 将 (segue) nil 传递给另一个 ViewController

如何在视图控制器之间传递数据而不在 ios 中使用 segue?