Ich verfolge Apple-Dokumentation für Datenstack Kern [Initialisieren der Core Data-Stack] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/InitializingtheCoreDataStack.html)Wie initialisiert man Core Data managedObjectContext mit einer Modellklasse? .
Hier ist mein Code:
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)")
}
}
}
}
ich das Objekt von AppDelegate Klasse zuzugreifen versuche: -
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
}.
So benutze ich es.
//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()
}
}
Ich erhalte einen fatalen Fehler.
Ich weiß nicht den Grund, aber möglicherweise saveValues()
wird vor Core Data verwalteten Kontext Objekt Initialisierung aufgerufen. Oder vielleicht initiiere ich falsch.
Ich versuche, Apple Dokumentation zu folgen, aber ich weiß nicht, was ich vermisse. Bitte kann mir jemand vorschlagen?
einfache Demo für Kerndaten Update hinzufügen löschen werfen Sie einen Blick https://github.com/SanjeetVerma/CoreData-CRUD-Operation-Add-Edit-Delete-Search- –