我有数据想通过 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 函数中不为空。我有表视图单元格通过一个名为"showStoreDetailsSegue"的segue连接到第二个视图控制器。
我有表视图单元格通过一个名为"showStoreDetailsSegue"的segue连接到第二个视图控制器。
这就是问题所在。您正在执行 segue 两次,第一次是在调用 didSelect
之前。
一种解决方案:从视图控制器连接 segue,而不是从单元格连接。
或者(更好的是(,删除didSelect
实现本身。你真的不需要selectedStores
.只需使用prepare
找出选择是什么,然后从那里开始。