Swift-performSegue导致ViewController在prepareForSegue传递数据之前加载

时间:2019-04-10 14:40:01

标签: swift uiviewcontroller segue

我正在尝试通过点击一个单元格在两个表视图之间进行排序。但是,似乎performSegue在prepareForSegue通过数据之前正在加载视图,因此该数组在第二个视图控制器中为空。

这是我的搜索代码:

    func prepare(for segue: UIStoryboardSegue, sender: Any?, didSelectRowAt indexPath: IndexPath) {
        if  let vc = segue.destination as? ModuleTableViewController {
            vc.modules = programmes[indexPath.row].modules
        }
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "ProgrammeToggleVCtoModuleVC", sender: self)
    }

我想让它在加载视图之前通过数据,因为第二个VC中有一个检查,如果不存在数据,则导致程序崩溃。

过去的几周我一直在使用Swift,所以如果我错过任何信息,请原谅,如果您需要更多信息,很高兴对其进行修改。

1 个答案:

答案 0 :(得分:1)

您需要从vc本身而不是从单元格中钩住segue,并将prepare改正为

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if  let vc = segue.destination as? ModuleTableViewController {
        vc.modules = programmes[tableView.indexPathForSelectedRow!.row].modules
    }
 }

OR

performSegue(withIdentifier: "ProgrammeToggleVCtoModuleVC", sender: indexPath.row)

使用

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if  let vc = segue.destination as? ModuleTableViewController {
        vc.modules = programmes[sender as! Int].modules
    }
 }