无法在SwiftUI中使用ForEach和CoreData将数据正确传递到模式表示中

问题描述 投票:1回答:1

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

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

删除对象也一样-不管我要删除哪个对象,最后一个对象始终被删除。

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

这是我的代码:

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)
                    }
                }
            }
        }
    }
}
ios swift core-data swiftui swiftui-list
1个回答
2
投票

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

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)
        }

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.