PrepareForSegue不在两个TableView控制器之间发送数据

时间:2017-03-10 16:09:57

标签: swift swift3

我正在尝试将测试变量传递给目标控制器,但测试不成功。

我的表演在这里完成:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        programKeySegue = programKeys[indexPath.section]

        self.performSegue(withIdentifier: "segueSelectedProgram", sender: self)
    }

我的准备:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "segueSelectedProgam" {
            let selectedProgramVC = segue.destination as! SelectedProgramTableViewController
            selectedProgramVC.programKey = "test" //programKeySegue
        }
    }

并在目标控制器中:

var programKey: String?

但是当我在viewDidLoad' nil'中打印(programKey)时打印到控制台。我之前使用过这种方法,它一直很好用。谁能告诉我我做错了什么?

我厌倦了从准备segue中删除覆盖,我尝试将自己附加到performsegue上,我尝试分配不同的变量来传递。没有任何效果。

1 个答案:

答案 0 :(得分:1)

如评论中所述,您的问题是由错字造成的。您可以通过不使用字符串比较来防止这种情况...

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

    // If there are multiple segues to this destination, you can  
    // perform a similar check on the source

    if let selectedProgramVC = segue.destination as? SelectedProgramTableViewController
        selectedProgramVC.programKey = "test" //programKeySegue
    }
}

此外,您可以使用视图控制器名称作为故事板中的segue名称,然后...

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    programKeySegue = programKeys[indexPath.section]

    self.performSegue(withIdentifier: String(describing: SelectedProgramTableViewController .self), sender: self)
}

et voila ...没有字符串!