Не удается правильно передать данные в модальное представление с помощью ForEach и CoreData в SwiftUI - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь передать данные какого-либо объекта из списка объектов на модальный лист, выбирая данные из 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)
                    }
                }
            }
        }
    }
}

1 Ответ

2 голосов
/ 12 апреля 2020

В стеке просмотра должен быть только один лист, поэтому просто переместите его из 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)
        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...