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'
Оболочки свойств еще не поддерживаются в локальных свойствах