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

Core Data数据传递异常:点击商品卡片跳转详情页显示错误数据求助

解决Core Data详情页数据不匹配问题

问题根源

你当前的实现里,首页通过@FetchRequest获取所有DataSet数据并遍历生成商品卡片,但跳转至详情页时没有把当前卡片对应的DataSet实例传递过去,反而在详情页直接取数据集合的第一个元素,这就导致不管点击哪个卡片,详情页都只显示第一条数据。

修复步骤

1. 修改首页NavigationLink,传递对应DataSet实例

在首页遍历FetchRequest结果时,把当前循环的DataSet对象作为参数传给详情页:

// 首页示例代码
struct HomeView: View {
    @FetchRequest(sortDescriptors: []) var dataSets: FetchedResults<DataSet>
    
    var body: some View {
        NavigationStack {
            List(dataSets) { dataSet in
                NavigationLink(destination: ProductCardDetailsView(selectedDataSet: dataSet)) {
                    ProductCardView(dataSet: dataSet)
                }
            }
        }
    }
}

2. 修改详情页,接收并展示传递的DataSet实例

移除详情页自行获取数据的逻辑,改为接收首页传过来的selectedDataSet,直接用这个实例展示内容:

// 详情页示例代码
struct ProductCardDetailsView: View {
    let selectedDataSet: DataSet
    
    var body: some View {
        VStack(alignment: .leading) {
            Text(selectedDataSet.title)
                .font(.title)
            Text(selectedDataSet.subTitle)
                .font(.subheadline)
            Text(selectedDataSet.name)
                .font(.body)
        }
        .padding()
    }
}

3. 规范商品卡片视图的数据接收(可选)

如果你的ProductCardView还未接收DataSet参数,同步修改保证卡片展示当前实例的数据:

struct ProductCardView: View {
    let dataSet: DataSet
    
    var body: some View {
        VStack {
            Text(dataSet.title)
            Text(dataSet.subTitle)
        }
    }
}

关键说明

通过直接传递具体的DataSet实例,详情页就能精准展示用户点击的卡片对应的数据,彻底解决“点错卡片显示错误内容”的问题,同时避免了详情页重复执行Fetch请求的冗余操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:15:07