редактировать базовый объект данных в SwiftUI - PullRequest
2 голосов
/ 26 февраля 2020

I pu sh объект, который поступает из Базовой базы данных на детальную страницу с текстовыми полями.

Когда пользователь изменяет текст в текстовых полях и нажимает сохранить, изменения должны быть сохранены в БД базовых данных.

Проблема: я понятия не имею, как изменить / обновить / изменить существующий объект базовых данных.

Мне, вероятно, нужно получить оригинал с помощью @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

Невозможно использовать элемент экземпляра 'barcode' в инициализаторе свойства; инициализаторы свойств запускаются до того, как станет доступным 'self'

Оболочки свойств еще не поддерживаются в локальных свойствах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...