У меня есть приложение SwiftUI, которое использует CoreData для хранения данных. Я использую @FetchRequest для загрузки данных в View.
Я хочу выбрать сущность из хранилища CoreData «Aircraft» с помощью средства выбора по умолчанию и сохранить выбор пользователя в другое хранилище («Flight»).
В данный момент я полностью потерян и не знаю, как сделать функционал Пикера.
- Что мне поставить в поле «Выбор» сборщика?
- Как получить доступ к значению спецификации 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
}