I am learning SwiftUI by building an app that uses a form with a TextField and imagePicker. Used two sets of codes, TextField and imagePicker together but don't know how to consolidate saveImage with Add/Save Button of fileData.writeData to save both data of TextField and image into Core Data at same time. Here are the codes:
@ObservedObject var fileData : FileVM
@Environment(\.managedObjectContext) var moc
@Environment(\.managedObjectContext) var context
@State private var image: Image?
@State private var showImagePicker = false
@State private var inputImage: UIImage?
...
Form {
HStack {
Text("File Name:")
Spacer()
TextField("required", text: $fileData.fileName)
...
}
HStack {
Text("Attachments: ")
...
Button(action: { self.showImagePicker.toggle() }) {
Text(" \(Image(systemName: "photo")) ")
}
}
Button(action: saveImage) { // the function of this button should consolidated in the Add/Save button below.
Text("Save")
...
}
...
Button(action: {fileData.writeData(context: context)}, label: {
title: do { Text(fileData.updateFile == nil ? "Add" : "Save")
...
func saveImage() {
let jpegPickedImage = inputImage?.jpegData(compressionQuality: 1.0)
let fileimages = FilesEnt(context: self.moc)
fileimages.fileImages = jpegPickedImage
try? self.moc.save()
print("Image is saved")
}
func loadImage() {
guard let inputImage = inputImage else { return }
image = Image(uiImage: inputImage)
}
func writeData(context : NSManagedObjectContext) {
if updateFile != nil {
updateFile.fileName = fileName
updateFile.fileImages = fileImages
try! context.save()
updateFile = nil
isNewData.toggle()
fileName = ""
fileImages = Data()
return
}
let newFile = FilesEnt(context: context)
newFile.fileName = fileName
newFile.fileImages = fileImages
do {
try context.save()
isNewData.toggle()
fileName = ""
fileImages = Data()
}
catch{
print(error.localizedDescription)
}
}
Thanks for help!