You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS中点击Google地图自定义信息窗口传递userData至下页失败求助

问题原因及解决方案

嘿,问题出在你prepare(for:sender:)方法里的一个关键错误!你在这个方法里新建了一个完全空白的GMSMarker实例:

let marker = GMSMarker()

这个新建的marker根本没有被设置过userData,所以marker.userData自然是nil,导致next.team也跟着变成nil。

你需要传递的是用户实际点击的那个信息窗口对应的marker,而不是重新创建一个空的。下面是修正步骤:

步骤1:修改信息窗口点击事件,传递正确的sender

把didTapInfoWindowOf方法里的performSegue的sender换成当前点击的marker:

func mapView(_ mapView: GMSMapView, didTapInfoWindowOf marker: GMSMarker) {
    // 把点击的marker作为sender传递给segue
    self.performSegue(withIdentifier: cellId, sender: marker)
}

步骤2:在转场准备方法中获取正确的marker和数据

修改prepare(for:sender:)方法,从sender中取出点击的marker,再提取对应的Team数据:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == cellId {
        // 先验证sender是我们需要的GMSMarker,并且能正确转成Team类型
        guard let tappedMarker = sender as? GMSMarker,
              let selectedTeam = tappedMarker.userData as? Team else {
            return
        }
        let nextVC = segue.destination as! NextViewController
        nextVC.team = selectedTeam
    }
}

这样修改后,转场时就能把用户点击的那个marker对应的Team数据正确传递到下一个视图控制器啦!

内容的提问来源于stack exchange,提问作者Daibaku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:19:07