Core data SwiftUI表单仅更新“上的属性”;输入“;

Core data SwiftUI表单仅更新“上的属性”;输入“;,core-data,swiftui,Core Data,Swiftui,我有一个表单,用户可以输入几个值来跟踪费用。 但是,只有当用户点击Enter时,这些值才会存储在属性中。如果添加了这些值,并且用户选择了下一个字段,则先前输入的属性的值保持为初始值 是否需要设置任何内容以接受字段的正常更改 谢谢 import SwiftUI import CoreData struct CreateEditChargeView: View { @Environment(\.managedObjectContext) private var viewContext

我有一个表单,用户可以输入几个值来跟踪费用。 但是,只有当用户点击
Enter
时,这些值才会存储在属性中。如果添加了这些值,并且用户选择了下一个字段,则先前输入的属性的值保持为初始值

是否需要设置任何内容以接受字段的正常更改

谢谢

import SwiftUI
import CoreData

struct CreateEditChargeView: View {
    @Environment(\.managedObjectContext) private var viewContext
    @Environment(\.presentationMode) var presentation
    private var isNew = true
    @ObservedObject var charge:Charge = Charge(entity: Charge.entity(), insertInto: nil)
    var selectedVehicle: Vehicle
    
    init(selectedVehicle: Vehicle, charge: Charge? = nil) {
        self.selectedVehicle = selectedVehicle
        if let charge = charge {
            isNew = false
            self.charge = charge
        } else {
            self.charge.id = UUID()
        }
    }
    @ViewBuilder
    var body: some View {
        Form {
            Section(header: Text("Basic")) {
                TextField("KM", value: $charge.odometer,formatter: Formatter.distanceFormatter)
                TextField("Price per Unit", value: $charge.pricePerUnit, formatter: Formatter.currencyFormatter)
                
            }
            
        }.navigationBarItems(leading: VStack{
            if presentation.wrappedValue.isPresented {
                Button(action: {
                    presentation.wrappedValue.dismiss()
                }) {
                    Text("Cancel")
                }
            }
        }, trailing: VStack {
            if presentation.wrappedValue.isPresented {
                Button(action: {
                    if isNew {
                        viewContext.insert(charge)
                        charge.vehicle = selectedVehicle
                    }
                    do {
                        try viewContext.save()
                    } catch {
                        ErrorHandler.handleError(error: error)
                    }
                    presentation.wrappedValue.dismiss()
                }) {
                    Text("Done")
                }
                
            }
        })
    }
}

这是通过格式化程序的
TextField
的设计行为实现的。如果它不符合你的需要,我建议考虑类似的方法。非常感谢。我不知道。