2017-08-28 118 views
0

我下面的Apple文档核心数据堆栈[初始化核心数据堆栈(https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/InitializingtheCoreDataStack.html如何使用模型类初始化核心数据managedObjectContext? 。

这里是我的代码:

import Foundation 
import CoreData 
class Cmodel: NSObject { 
var managedObjectContext: NSManagedObjectContext 

init(completionClosure: @escaping() ->()) { 
    //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)") 
     } 
    } 
} 
} 

我试图从AppDelegate类访问该对象: -

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    managedOBJ = Cmodel(completionClosure: { 

     DispatchQueue.main.async { 
      self.context = self.managedOBJ?.managedObjectContext 
     } 
    }) 

    saveValues() 
    // Override point for customization after application launch. 
    return true 
}. 

这就是我如何使用它。

//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() 
    } 
} 

我得到致命错误。

我不知道原因,但可能会在Core Data托管上下文对象初始化之前调用saveValues()。或者可能是我以错误的方式初始化。

我正在尝试关注Apple文档,但我不知道自己错过了什么。请任何人都可以建议我?

+0

核心数据简单演示添加更新删除看看https://github.com/SanjeetVerma/CoreData-CRUD-Operation-Add-Edit-Delete-Search- –

回答

0

saveValues被称为completionClosure之外。这是你收到一个致命的错误。核心数据堆栈没有准备好。

你能解释一下你想达到什么吗?

+0

是啊其实我想初始化核心数据,我想保存并更新并从我的模型类中删除它。 谢谢 – kishor0011

+0

@ kishor0011填充或初始化? –

+0

在我的模型类中初始化。 – kishor0011

相关问题