Can’t pass data correctly to modal presentation using ForEach and CoreData in SwiftUI

*爱你&永不变心* 提交于 2020-04-16 05:48:15

问题


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.

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

Here is my code:

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

回答1:


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

    }
}


来源:https://stackoverflow.com/questions/61176412/can-t-pass-data-correctly-to-modal-presentation-using-foreach-and-coredata-in-sw

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!