prepareforsegue函数内部变量为空

时间:2019-05-29 00:00:12

标签: ios swift

我有一些要通过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()

我有另一个Viewcontroller做着完全相同的事情,但是在prepareforsegue函数中数组不是空的。我通过名为“ showStoreDetailsS​​egue”的segue将tableview单元连接到secondviewcontroller。

1 个答案:

答案 0 :(得分:2)

  

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

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

一种解决方案:连接来自视图控制器而非单元的segue。

或者(更好),删除您的didSelect实现本身。您实际上并不需要selectedStores。只需使用prepare找出选择的内容,然后从那里进行选择。