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

Swift PrepareForSegue不在两个TableView控制器之间发送数据,swift,swift3,Swift,Swift3,我试图将测试变量传递给目标控制器,但测试失败 我的绩效考核在这里完成: override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { programKeySegue = programKeys[indexPath.section] self.performSegue(withIdentifier: "segueSelectedProgram", s

我试图将测试变量传递给目标控制器,但测试失败

我的绩效考核在这里完成:

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中打印(programKey)时,会将“nil”打印到控制台。我以前用过这种方法,而且一直效果很好。谁能告诉我我做错了什么


我厌倦了从prepare for segue中删除覆盖,我尝试将self附加到performsgue,并尝试分配要传递的不同变量。没有任何效果。

如评论中所述,您的问题是由打字错误引起的。您可以通过不使用字符串比较来防止将来出现这种情况

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
    }
}
此外,您可以在情节提要中使用视图控制器名称作为序列名称,然后

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

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

等等,瞧,没有线

在您的
prepareForSegue
中,您的序列标识符有一个输入错误。谢谢!虽然我觉得自己很蠢,但它现在起作用了。哈哈,不客气,我会投票结束这个问题,因为它不再重复。