Fetch core data object into a SwiftUI picker

357 Views Asked by At

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

    }
}
1

There are 1 best solutions below

5
On

Try this:

.onChange(of: selectedFlavor) {
   self.order.flavor = $0.rawValue
}
.onAppear {
   self.tableNumber = self.order.tableNumber
   self.selectedFlavor = Flavor(rawValue: self.order.flavor)
}