无法在SwiftUI中使用ForEach和CoreData将数据正确传递到模式表示 [英] Can’t pass data correctly to modal presentation using ForEach and CoreData in SwiftUI

查看:156
本文介绍了无法在SwiftUI中使用ForEach和CoreData将数据正确传递到模式表示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图将某些对象的数据从对象列表传递到模式表,从CoreData中获取数据。

Im trying to pass data of some object from list of objects to modal sheet, fetching data from CoreData.

问题是,无论我单击列表中的哪个对象,详细信息视图中都只会显示最后添加的数据形式的对象。

The problem is that no matter what object I click on in the list, only the data form last added object appears in the details view.

删除对象的方法也一样-不管我要删除哪个对象,最后一个对象都会一直删除。

The same goes for deleting the object - no matter what object I'm trying to delete, the last one is deleted all the time.

问题使用NavigationLink消失了,但它不适合我。

Problem disappears using NavigationLink, but it is not suitable for me.

这是我的代码:

import SwiftUI

struct CarScrollView: View {

    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: Cars.entity(), sortDescriptors: []) var cars: FetchedResults<Cars>

    @State var showDetails = false

    var body: some View {
        VStack {
            ScrollView (.vertical, showsIndicators: false) {
                ForEach (cars, id: \.self) { car in

                    Text("\(car.text!)")
                        .onTapGesture {
                            self.showDetails.toggle()
                    }
                    .sheet(isPresented: self.$showDetails) { CarDetail(id: car.id, text: car.text)
                    }
                }
            }
        }
    }
}


推荐答案

视图堆栈中应该只有一张纸,所以只需将其移出 ForEach ,如下所示

There should be only one sheet in view stack, so just move it out of ForEach, like below

struct CarScrollView: View {

    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: Cars.entity(), sortDescriptors: []) var cars: FetchedResults<Cars>

    @State private var selectedCar: Car? = nil

    var body: some View {
        VStack {
            ScrollView (.vertical, showsIndicators: false) {
                ForEach (cars, id: \.self) { car in

                    Text("\(car.text!)")
                        .onTapGesture {
                            self.selectedCar = car
                    }
                }
            }
        }
        .sheet(item: self.$selectedCar) { car in
             CarDetail(id: car.id, text: car.text)
        }

    }
}

这篇关于无法在SwiftUI中使用ForEach和CoreData将数据正确传递到模式表示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆