我下面的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文档,但我不知道自己错过了什么。请任何人都可以建议我?
核心数据简单演示添加更新删除看看https://github.com/SanjeetVerma/CoreData-CRUD-Operation-Add-Edit-Delete-Search- –