将信息传递给新视图控制器

时间:2017-08-27 06:58:10

标签: ios swift swift3

我有一个tableview,我想在另一个视图控制器中显示单元格详细信息。

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedCell = listAthkar[indexPath.row]
    let destinationVC = showCellVC()
    destinationVC.cellTitle.text = selectedCell.title
    destinationVC.cellDisc.text  = selectedCell.details
    performSegue(withIdentifier: "showCell", sender: self)
}

showCellVCUILabeltextview我想要传递数据,数据来自核心数据。 每次按下单元格时,应用程序都会崩溃。

这是我得到的错误

  

致命错误:在展开Optional值时意外发现nil       2017-08-27 02:46:29.315056-0400 AthkarKF [13152:3972483]致命错误:       在展开可选值时意外发现nil

我认为错误是不言自明的,但我不确定可选值在哪里,我不确定这是否是将数据传递给另一个VC的正确方法。

你能帮忙吗,我真的很感激。

1 个答案:

答案 0 :(得分:0)

您应该通过prepareForSegue:sender:方法传递所需的数据。您可以通过执行以下操作来实现此目的:

1 - selectedCell声明为可在整个视图控制器中访问的实例变量:

// for sure you'll need to declare its data type...
var selectedCell:...

2 - tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)委托方法中删除“传递数据”代码,您所要做的就是执行segue:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    selectedCell = listAthkar[indexPath.row]
    performSegue(withIdentifier: "showCell", sender: self)
}

3 - 实施prepareForSegue:sender:并通过它传递数据:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // you may need to check the segue identifier in case of your view controller contains multiple segues
    if segue.identifier == "showCell" {
        let destinationVC = segue.destination as! showCellVC()
        destinationVC.cellTitle.text = selectedCell.title
        destinationVC.cellDisc.text  = selectedCell.details
    }
}


一般而言,最终结果应类似于:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    // STEP #01:
    // for sure you'll need to declare its data type...
    var selectedCell:...

    // STEP #02:
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedCell = listAthkar[indexPath.row]
        performSegue(withIdentifier: "showCell", sender: self)
    }

    // STEP #03:
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // you may need to check the segue identifier in case of your view controller contains multiple segues
        if segue.identifier == "showCell" {
            let destinationVC = segue.destination as! showCellVC()
            destinationVC.cellTitle.text = selectedCell.title
            destinationVC.cellDisc.text  = selectedCell.details
        }
    }
}