title: How to initialise Core Data managedObjectContext using a model class?
body: <p>I am following Apple Documentation for core data stack, especially <a href="https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/InitializingtheCoreDataStack.html" rel="nofollow noreferrer">Initializing the Core Data Stack</a>.</p>
  
  <p>Here is my code:</p>
  
  <pre><code>import Foundation
  import CoreData
  class Cmodel: NSObject {
  var managedObjectContext: NSManagedObjectContext
  
  init(completionClosure: @escaping () -&gt; ()) {
      //This resource is the same name as your xcdatamodeld contained in your project
      guard let modelURL = Bundle.main.url(forResource: "MySampleListView", withExtension:"momd") else {
          fatalError("Error loading model from bundle")
      }
      // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
      guard let mom = NSManagedObjectModel(contentsOf: modelURL) else {
          fatalError("Error initializing mom from: \(modelURL)")
      }
  
      let psc = NSPersistentStoreCoordinator(managedObjectModel: mom)
  
      managedObjectContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.mainQueueConcurrencyType)
      managedObjectContext.persistentStoreCoordinator = psc
  
      let queue = DispatchQueue.global(qos: DispatchQoS.QoSClass.background)
      queue.async {
          guard let docURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last else {
              fatalError("Unable to resolve document directory")
          }
          let storeURL = docURL.appendingPathComponent("DataModel.sqlite")
          do {
              try psc.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: storeURL, options: nil)
              //The callback block is expected to complete the User Interface and therefore should be presented back on the main queue so that the user interface does not need to be concerned with which queue this call is coming from.
              DispatchQueue.main.sync(execute: completionClosure)
          } catch {
              fatalError("Error migrating store: \(error)")
          }
      }
  }
  }
  </code></pre>
  
  <p>I am trying to access that object from Appdelegate class :-  </p>
  
  <pre><code>func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -&gt; Bool {
      managedOBJ = Cmodel(completionClosure: {
  
          DispatchQueue.main.async {
              self.context = self.managedOBJ?.managedObjectContext
          }
      })
  
      saveValues()
      // Override point for customization after application launch.
      return true
  }. 
  </code></pre>
  
  <p>This is how I use it.</p>
  
  <pre><code>//Save Local DB
  extension AppDelegate {
  
    func saveValues()  {
      let testQuestionModel : Kishor = NSEntityDescription.insertNewObject(forEntityName: "Kishor", into: AppDelegate.getContext()) as! Kishor
  
      testQuestionModel.name = "Kishor Da Pahalwani"
  
      self.saveContext()
    }
  }
  </code></pre>
  
  <p>I am getting fatal error.</p>
  
  <p>I don't know the reason but maybe <code>saveValues()</code> getting called before Core Data managed context object initialization? Or maybe I am initialising in wrong way?</p>
  
  <p>I am trying to follow Apple Documentation but I don't know what I am missing. </p>