PrepareForSegue 不在两个 TableView 控制器之间发送数据
Posted
技术标签:
【中文标题】PrepareForSegue 不在两个 TableView 控制器之间发送数据【英文标题】:PrepareForSegue not sending data between two TableView Controllers 【发布时间】:2017-03-10 16:09:56 【问题描述】:我正在尝试将测试变量传递给我的目标控制器,但测试不成功。
我的表演在这里完成:
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 中 print(programKey) 时,'nil' 被打印到控制台。我以前使用过这种方法,它一直工作得很好。谁能告诉我我做错了什么?
我厌倦了从为 segue 准备中删除覆盖,我尝试将 self 附加到 performegue 并尝试分配不同的变量来传递。没有任何效果。
【问题讨论】:
在您的prepareForSegue
中,您的 segue 标识符中有错字。
谢谢!它现在正在工作,虽然我觉得很愚蠢哈哈
不客气,我将投票结束这个问题,因为这个问题不再可重现。
【参考方案1】:
正如 cmets 中所述,您的问题是由拼写错误引起的。您可以通过不使用字符串比较来防止这种情况发生......
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)
瞧……没有字符串!
【讨论】:
以上是关于PrepareForSegue 不在两个 TableView 控制器之间发送数据的主要内容,如果未能解决你的问题,请参考以下文章
来自一个视图控制器的两个segue,prepareForSegue
Swift:prepareForSegue 有两个不同的 segue
UITableViewControllers 上的 prepareforSegue 方法
我想合并两个表 [Table1] 和 [Table2] 并按 ID 显示结果 where [Tabl1].[names] = 'any string name'?