我有要通过段发送给另一个视图控制器的数据。我将一些用户选择的数据添加到表视图的'didselectrow‘内的第一个视图控制器中的数组中,并在'prepareforsegue’中尝试将该数组的第一个元素设置为等于第二个视图控制器中的变量。然而,我得到了一个'index out of range error‘,告诉我数组是空的,我不确定为什么。
这是第一个视图控制器:
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单元格通过名为"showStoreDetailsSegue“的段连接到第二个视图控制器。
发布于 2019-05-29 08:03:15
我让tableview单元格通过一个叫做"showStoreDetailsSegue“的网段连接到
控制器。
这就是问题所在。您正在执行两次段,第一次是在调用didSelect
之前。
一种解决方案是:从视图控制器连接segue,而不是单元。
或者(最好是)删除您的didSelect
实现本身。您并不真正需要selectedStores
。只需使用prepare
找出选择是什么,然后从那里开始。
https://stackoverflow.com/questions/56351449
复制相似问题