🐛 Fixing bug where User data was not properly saved to CoreData

This commit is contained in:
2020-12-22 11:30:41 +01:00
committed by Patrick Müller
parent 46551258e2
commit 63b1e56618
5 changed files with 70 additions and 16 deletions
+1 -1
View File
@@ -51,7 +51,7 @@ struct PersistenceController {
if self.context.hasChanges {
do {
try self.context.save()
print("In CoreData.stack.save()")
print("In PersistenceController.shared.save()")
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
@@ -0,0 +1,42 @@
//
// UtilityFunctions.swift
// DHBW-Service
//
// Created by Patrick Müller on 22.12.20.
//
import Foundation
import CoreData
class UtilityFunctions {
public class func getCoreDataObject(entity: String) -> [NSManagedObject]{
let managedContext =
PersistenceController.shared.context
let fetchRequest =
NSFetchRequest<NSManagedObject>(entityName: entity)
do {
return try managedContext.fetch(fetchRequest)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
return []
}
}
public class func deleteAllCoreDataEntitiesOfType(type: String) -> Bool{
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: type)
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do {
try PersistenceController.shared.context.execute(deleteRequest)
PersistenceController.shared.save()
return true
} catch let error as NSError {
print(error)
return false
}
}
}
@@ -34,6 +34,7 @@ struct FirstOpeningSettings: View {
.padding(.horizontal)
Button(action: {
self.settings.isFirstOpening = !self.settings.isFirstOpening
self.saveToCoreData()
}){
Text("Confirm")
.padding()
@@ -47,6 +48,11 @@ struct FirstOpeningSettings: View {
extension FirstOpeningSettings{
func saveToCoreData(){
// Delete old user data
let status = UtilityFunctions.deleteAllCoreDataEntitiesOfType(type: "User")
print("Deleting old user data status: \(status)")
// Insert new user data
let entity = NSEntityDescription.entity(forEntityName: "User", in: PersistenceController.shared.context)!
let user = NSManagedObject(entity: entity, insertInto: PersistenceController.shared.context)
user.setValue(name, forKey: "name")
+7 -13
View File
@@ -10,10 +10,7 @@ import CoreData
struct HomeView: View {
@EnvironmentObject var settings: LocalSettings
@State var user: NSManagedObject = NSManagedObject()
@State private var name: String = ""
var body: some View {
VStack {
@@ -24,7 +21,7 @@ struct HomeView: View {
}
Text("Test")
// Text(user.value(forKey: "name") as! String)
Text(self.name)
}.onAppear{
self.readFromCoreData()
@@ -33,15 +30,12 @@ struct HomeView: View {
}
extension HomeView{
func readFromCoreData(){
let managedContext = PersistenceController.shared.context
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "User")
func readFromCoreData() {
let fetchedData = UtilityFunctions.getCoreDataObject(entity: "User")
do {
try print(managedContext.fetch(fetchRequest))
self.user = try managedContext.fetch(fetchRequest)[0]
} catch let error as NSError {
print(error)
if(!fetchedData.isEmpty) {
let user = fetchedData[0]
self.name = user.value(forKey: "name") as! String
}
}
}