在 SwiftUI 中编辑核心数据对象

Gle*_*her 5 core-data swiftui

我将来自核心数据数据库的对象推送到带有文本字段的详细信息页面。

当用户更改文本字段中的文本并按保存时,更改应保存到核心数据数据库中。

问题:我不知道如何修改/更新/更改现有的核心数据实体。

我可能需要通过 @FetchRequest 获取原始文件,但每次尝试时都会遇到一些问题。

问题 1:假设实体将 object.id 作为 UUID,我如何在 SwiftUI 中获取该对象?

问题 2:如何使用文本字段的更改内容覆盖获取的对象?

    struct ProductDetail: View {
    @State var barcode: Barcode
    
    @Environment(\.presentationMode) var presentationMode
    @Environment(\.managedObjectContext) var context
    //let datahandler = Datahandler()

    
    var body: some View {
        VStack {
            HStack {
                Text("Barcode: ")
                Spacer()
                TextField("Barcode", text: Binding($barcode.code, ""))
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .frame(width: 250, alignment: .trailing)
            }
            HStack {
                Text("Amount: ")
                Spacer()
                TextField("Amount", text: Binding($barcode.amount, ""))
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .frame(width: 250, alignment: .trailing)
                    .keyboardType(.numberPad)
            }
            HStack{
                Button("Back") {
                    self.presentationMode.wrappedValue.dismiss()
                }
                Spacer()
                Button("Save"){
                    //self.datahandler.updateBarcode(barcode: self.object)
                    self.editBarcode(barcode: barcode)
                    self.presentationMode.wrappedValue.dismiss()
                }
            }
        .padding()
        }
    .padding()
    }
    
    func editBarcode(barcode: Barcode) {
        

// Question 1: Fetch Original object using barcode.id
// Question 2: How to but barcode into context so it can overwrite the core data original?

        try? context.save()
    }
Run Code Online (Sandbox Code Playgroud)

试图:

    func editBarcode(barcode: Barcode) {
        @FetchRequest(sortDescriptors: [], predicate: NSPredicate(format: "self.id IN %@", barcode.id)) var results: FetchedResults<Barcode>
        results.first?.amount = barcode.amount
        results.first?.code = barcode.code
        try? context.save()
    }
Run Code Online (Sandbox Code Playgroud)

错误:

参数类型“UUID?” 不符合预期的类型“CVarArg”

不能在属性初始值设定项中使用实例成员“barcode”;属性初始值设定项在 'self' 可用之前运行

本地属性尚不支持属性包装器