Reputation: 3778
Goal: fetch Fetch core data object into a SwiftUI picker
Problem: haven't figured out how to pass data into a Picker
import SwiftUI
struct DetailView: View {
@ObservedObject var order: Order
@State var showOrderEdit = false
var body: some View {
Form{
Text(order.flavor)
Text(order.tableNumber)
}
.navigationTitle(order.pizzaType)
.toolbar {
ToolbarItem(placement: .primaryAction) {
//edit button
Button(action: {
showOrderEdit = true
}, label: {
Text("Edit")
})
.sheet(isPresented: $showOrderEdit) {
DetailEdit(order: order)
}
}
}
}
}
import SwiftUI
struct DetailEdit: View {
@State var tableNumber = ""
@ObservedObject var order: Order
@Environment(\.managedObjectContext) private var viewContext
@Environment (\.presentationMode) var presentationMode
@State var selectedFlavor = Flavor.chocolate
enum Flavor: String, CaseIterable, Identifiable {
case chocolate
case vanilla
case strawberry
var id: String { self.rawValue }
}
var body: some View {
NavigationView {
Form {
//1- this work fine
TextField("table number", text: $tableNumber)
//2- this doesnt get updated
Picker("Flavor", selection: $selectedFlavor) {
Text("Chocolate").tag(Flavor.chocolate)
Text("Vanilla").tag(Flavor.vanilla)
Text("Strawberry").tag(Flavor.strawberry)
}
Text("Selected flavor: \(selectedFlavor.rawValue)")
}
//fetch data from core data -> item edit
.onAppear {
//1- this work fine
self.tableNumber = self.order.tableNumber
//2- this doesnt get updated
self.selectedFlavor.rawValue = self.order.flavor
}
.navigationTitle("Edit Order")
}
}
Upvotes: 1
Views: 353
Reputation: 257711
Try this:
.onChange(of: selectedFlavor) {
self.order.flavor = $0.rawValue
}
.onAppear {
self.tableNumber = self.order.tableNumber
self.selectedFlavor = Flavor(rawValue: self.order.flavor)
}
Upvotes: 2