首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >prepareforsegue函数内部的变量为空

prepareforsegue函数内部的变量为空
EN

Stack Overflow用户
提问于 2019-05-29 08:00:12
回答 1查看 70关注 0票数 1

我有要通过段发送给另一个视图控制器的数据。我将一些用户选择的数据添加到表视图的'didselectrow‘内的第一个视图控制器中的数组中,并在'prepareforsegue’中尝试将该数组的第一个元素设置为等于第二个视图控制器中的变量。然而,我得到了一个'index out of range error‘,告诉我数组是空的,我不确定为什么。

这是第一个视图控制器:

代码语言:javascript
复制
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):

代码语言:javascript
复制
var selectedStore = String()

我让另一个视图控制器执行完全相同的操作,但是prepareforsegue函数中的数组不是空的。我让tableview单元格通过名为"showStoreDetailsSegue“的段连接到第二个视图控制器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-29 08:03:15

我让tableview单元格通过一个叫做"showStoreDetailsSegue“的网段连接到

控制器。

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56351449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档