Выберите и сохраните значение из сущности CoreData, используя Picker (SwiftUI) - PullRequest
1 голос
/ 18 января 2020

У меня есть приложение SwiftUI, которое использует CoreData для хранения данных. Я использую @FetchRequest для загрузки данных в View.

Я хочу выбрать сущность из хранилища CoreData «Aircraft» с помощью средства выбора по умолчанию и сохранить выбор пользователя в другое хранилище («Flight»).

В данный момент я полностью потерян и не знаю, как сделать функционал Пикера.

  1. Что мне поставить в поле «Выбор» сборщика?
  2. Как получить доступ к значению спецификации c модели в текстовой метке ячейки сборщика (например, показать в метке строку «Строка с регистрацией самолета» (вар «регистрация» в моем классе) ? Я пробовал много вариантов, таких как

Text ("(aircraft.registration ??" Unknown ")")

, но все они дают неправильная ссылка и последующая ошибка компиляции.

Вот мой полный код представления:

struct PickerView: View {

    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: Aircraft.entity(), sortDescriptors: []) var aircrafts: FetchedResults<Aircraft>
    @State private var selectedAircraft = "" // should I use it here? 

    var body: some View {
        Picker("Select aircraft", selection: self.$selectedAircraft) { // here i'm lost. I want to display registration String on my Picker


            ForEach(aircrafts, id: \.self) {aircraft in
                Text("\(aircraft.registration ?? "Unknown")") // obviously I'm doing something wrong here 

                Button("Save") {
                    let newFlight = Flight(context: self.moc)
                    newFlight.aircraft = self.selectedAircraft // not sure if i'm using correct logic here to save the registration string to to the Flight entity

                    try? self.moc.save()
                    self.presentationMode.wrappedValue.dismiss()
                }
            }
        }
    }
} 

Вот мой класс Flight (автоматически генерируемый на основе модели сущности CoreData):

extension Aircraft {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Aircraft> {
        return NSFetchRequest<Aircraft>(entityName: "Aircraft")
    }

    @NSManaged public var aircraftClass: String?
    @NSManaged public var aircraftModel: String?
    @NSManaged public var id: UUID?
    @NSManaged public var registration: String?

}

А вот мой класс самолетов (автоматически генерируется на основе модели сущности CoreData):

extension Flight {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Flight> {
        return NSFetchRequest<Flight>(entityName: "Flight")
    }

    @NSManaged public var aircraft: String? // we are interested to store the value from picker here
    @NSManaged public var flightDuration: Double
    @NSManaged public var from: String?
    @NSManaged public var id: UUID?
    @NSManaged public var remark: String?
    @NSManaged public var timeIn: String?
    @NSManaged public var timeOut: String?
    @NSManaged public var to: String?
    @NSManaged public var totalTime: Double


}
...