无法在 SwiftUI 中使用 ForEach 和 CoreData 将数据正确传递到模态表示
Can’t pass data correctly to modal presentation using ForEach and CoreData in SwiftUI
我正在尝试将某个对象的数据从对象列表传递到模态 sheet,从 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)
}
}
}
}
}
}
视图堆栈中应该只有一个sheet,所以只需将其移出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)
}
}
}
我正在尝试将某个对象的数据从对象列表传递到模态 sheet,从 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)
}
}
}
}
}
}
视图堆栈中应该只有一个sheet,所以只需将其移出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)
}
}
}