【问题标题】:Fetch core data object into a SwiftUI picker将核心数据对象提取到 SwiftUI 选择器中
【发布时间】:2020-12-03 15:52:31
【问题描述】:

目标:将 Fetch 核心数据对象提取到 SwiftUI 选择器中

问题:还没有弄清楚如何将数据传递到 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")

    }
}

【问题讨论】:

    标签: core-data swiftui xcode11


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • Detail->编辑作品(必须强制展开),选择器更新! :) 但是...当在选择器上选择另一个选项时,它保持相同的值
    • ex: DetailView(vanilla selected) -> EditView(vanilla selected) -> Picker (chocolate selected) -> EditView (显示 vanilla, 即使我们改成 Chocolate )
    • 可能是因为 swiftUI .onAppear 在 Picker > EditView 上再次获取核心数据?
    • 在更改选择器值时,您需要将其设置回核心数据对象(当然假设您稍后保存整个对象)。查看更新。
    • 谢谢!现在测试了,但是选择器仍然没有更新。它对你有用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2021-07-18
    • 2020-04-02
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多