prepareforsegue 函数中的变量为空

Posted

技术标签:

【中文标题】prepareforsegue 函数中的变量为空【英文标题】:Variable is empty inside of prepareforsegue function 【发布时间】:2019-05-29 00:00:11 【问题描述】:

我有想要通过 segue 发送到另一个视图控制器的数据。我将一些用户选择的数据添加到表视图的“didselectrow”内部的第一个视图控制器中的数组中,并在“prepareforsegue”中尝试将该数组的第一个元素设置为等于我的第二个视图控制器中的变量。但是,我收到一个“索引超出范围错误”,告诉我数组为空,我不知道为什么。

这是第一个视图控制器:

var selectedStores = [String]()

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
        selectedStores.append(stores[indexPath.row])
        performSegue(withIdentifier: "showStoreDetailsSegue", sender: self)
    

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        print("Prepare for segue called")
        if segue.identifier == "showStoreDetailsSegue" 
            let destinationVC = segue.destination as! StoreDetailsViewController

            destinationVC.selectedStore = selectedStores[0]
        
    

第二个视图控制器(StoreDetailsViewController):

var selectedStore = String()

我有另一个视图控制器在做同样的事情,但是在 prepareforsegue 函数中数组不是空的。我将 tableview 单元通过名为“showStoreDetailsS​​egue”的 segue 连接到 secondviewcontroller。

【问题讨论】:

【参考方案1】:

我通过名为“showStoreDetailsS​​egue”的 segue 将 tableview 单元连接到 secondviewcontroller。

这就是问题所在。您正在执行 segue 两次,第一次是在调用 didSelect 之前。

一种解决方案:从视图控制器连接 segue,而不是单元格。

或者(更好),删除您的 didSelect 实现本身。你真的不需要selectedStores。只需使用prepare 找出选择是什么,然后从那里开始。

【讨论】:

那么第一次是来自情节提要中的单元格连接,对吗?你说要删吗?不过我需要 segue 标识符。 基本上这是昨天的***.com/questions/56319257/… 和之前的数百个的副本。

以上是关于prepareforsegue 函数中的变量为空的主要内容,如果未能解决你的问题,请参考以下文章

将视图控制器分配给 prepareForSegue 中的变量时的 Swift EXC_BREAKPOINT

在prepareForSegue方法中防止segue?

覆盖 prepareForSegue 函数时 IBAction 中的线程错误

覆盖 prepareForSegue 函数时 IBAction 中的线程错误

使用 prepareForSegue 设置方法值

将变量从 tableView 传递给 prepareForSegue?