Post

Replies

Boosts

Views

Activity

coredata update json background thread problem
Hi, I have the following coredata singleton class in my appdelegate i try to update the data from json but in my app when it launches i get different error messages regarding thread or observer of NSManagedObjectContextObjectsDidChangeNotification or Incorrect guard value: or Main Thread Checker: UI API called what is the problem and what changes should i make for it to work? thanks import CoreData import Foundation class CoreDataStack {       static let sharedManager = CoreDataStack()   private init() {} // Prevent clients from creating another instance.       //This is the name of your coreData Database   static let modelName = "myDB"   static let FirstLaunchKey = "firstLaunch"     lazy var managedObjectModel: NSManagedObjectModel = {     let modelURL = Bundle.main.url(forResource: CoreDataStack.modelName, withExtension: "momd")!     return NSManagedObjectModel(contentsOf: modelURL)!   }()           lazy var applicationDocumentsDirectory: URL = {     return NSPersistentContainer.defaultDirectoryURL()   }()       lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {     let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)           let persistentStoreURL = self.applicationDocumentsDirectory.appendingPathComponent(CoreDataStack.modelName + ".sqlite")           do {               // let dict = [NSSQLitePragmasOption: ["journal_mode":"DELETE"]]   try coordinator.addPersistentStore(ofType: NSSQLiteStoreType,                     configurationName: nil,                     at: persistentStoreURL,               options: [NSMigratePersistentStoresAutomaticallyOption: true,                    NSInferMappingModelAutomaticallyOption: false])     } catch {       fatalError("Persistent store error! \(error)")     }           return coordinator   }()           fileprivate lazy var saveManagedObjectContext: NSManagedObjectContext = {     let moc = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)     moc.persistentStoreCoordinator = self.persistentStoreCoordinator     return moc   }()       @objc lazy var mainObjectContext: NSManagedObjectContext = {     let managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)     managedObjectContext.parent = self.saveManagedObjectContext     return managedObjectContext   }()       func saveMainContext() {     guard mainObjectContext.hasChanges || saveManagedObjectContext.hasChanges else {       return     }       mainObjectContext.performAndWait() {       // print("save performAndWait")       do {         try self.mainObjectContext.save()       } catch {         fatalError("Error saving main managed object context! \(error)")       }     }     saveManagedObjectContext.perform() {       // print("save simple")       do {         try self.saveManagedObjectContext.save()       } catch {         fatalError("Error saving private managed object context! \(error)")       }     }   }   func removeDatabaseForVersion(version:String){     let previouslyVersion = UserDefaults.standard.bool(forKey: version)      if !previouslyVersion {       UserDefaults.standard.set(true, forKey: version)       // Default directory where the CoreDataStack will store its files       let directory = NSPersistentContainer.defaultDirectoryURL()       let url = directory.appendingPathComponent(CoreDataStack.modelName + ".sqlite")               let shmURL = directory.appendingPathComponent(CoreDataStack.modelName + ".sqlite-shm")               let walURL = directory.appendingPathComponent(CoreDataStack.modelName + ".sqlite-wal")               _ = try? FileManager.default.removeItem(at: url)       _ = try? FileManager.default.removeItem(at: shmURL)       _ = try? FileManager.default.removeItem(at: walURL)     }   }       }   [update db class](https://developer.apple.com/forums/content/attachment/31e8ff0d-abb3-4fb7-a346-c05f8a610b23){: .log-attachment} in my appdelegate: UpdateDbClass.updateDatabase(entityName: DbTable.VehiclesEntity.rawValue, completionHandler: {       print(" DB updated delegate")     })       update db class - https://developer.apple.com/forums/content/attachment/31e8ff0d-abb3-4fb7-a346-c05f8a610b23
0
0
548
Oct ’20