Posts

Post marked as solved
4 Replies
I think this problem happens because of my DispatchQueue.global(qos: .background).async. I use this to store data minutes in my music app when users pause or next to the next music. below is the code of how I use this qos background. ... DispatchQueue.global(qos: .background).async { ... //fetch the previous data before replace or save the new one let context = self.managedObjectContext let fetchRequest: NSFetchRequestSomeEntityModel = SomeEntityModel.fetchRequest()    fetchRequest.predicate = NSPredicate(format: "id=%@", "001")  let fetchResult = try context.fetch(fetchRequest) ... } ...
Post marked as solved
4 Replies
okay, this problem has been solved, I was noticed that I was using -com.apple.CoreData.ConcurrencyDebug 1 for debugging my core data thread process, and there is an issue where my NSManagedObjectContext was defined at the main thread. the process that my core data processes occurred at background thread, so the exc_breakpoint appears because there is a violation in using dispatch in my core data process. I have understood this by reading about core data multithreading rules. how I solve this problem by using performAndWait for my NSManagedObjectContext if I want still processing in the background thread, but if I change the process to the main thread it doesn't need to use performAndWait. ... DispatchQueue.global(qos: .background).async { ... //fetch the previous data before replace or save the new one let context = self.managedObjectContext     context.performAndWait { let fetchRequest: NSFetchRequestSomeEntityModel = SomeEntityModel.fetchRequest()     fetchRequest.predicate = NSPredicate(format: "id=%@", "001")   let fetchResult = try context.fetch(fetchRequest) ... } ... } ... ... ... lazy var managedObjectContext: NSManagedObjectContext = {     let coordinator = self.persistentStoreCoordinator     var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)     managedObjectContext.persistentStoreCoordinator = coordinator           return managedObjectContext   }()
Post marked as solved
4 Replies
oh after I read the link that you have been attached, I noticed that I used dispatch for running this code, I am using dispatch for the background thread, but if I remove the dispatch method, the app running well. do-catch that handles the error from try won't be print the error.