在SwiftUI中编辑核心数据对象

时间:2020-02-26 10:04:01

标签: core-data swiftui

我将来自Core Data Database的对象推送到带有文本字段的详细信息页面。

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

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

我可能需要通过@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()
    }

尝试:

    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()
    }

错误:

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

不能在属性初始化程序中使用实例成员“条形码”; 属性初始化程序在“自我”可用之前运行

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

0 个答案:

没有答案