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
相关产品推荐
相关产品推荐

