Ich versuche, Core Data fest im Griff zu bekommen und zum größten Teil macht alles seit, insbesondere mit Kind/Eltern-Kontexte und Abrufergebnis-Controller. Ich bin jedoch irgendwie auf dem CoreDataStack festgefahren. Ich versuche, das Attribut 'Kontext' im Rest des Programms zu nennen. Ich kann den Kontext in meiner ersten Ansicht drucken, aber er scheint nicht in der ganzen App über die Navigationsleiste zu bestehen.ManagedObjectContext in CoreDataStack ist nach dem Auspacken null zurückgegeben
Dies ist CoreDataStack.swift
//exablishes the directory to be used for the stack in SQLite fashion
private lazy var applicationDocumentsDirectory: NSURL = {
let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
return urls[urls.count-1]
}()
//establishes the managed context by which managed objects interact in reading and writing
lazy var context: NSManagedObjectContext = {
var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = self.psc
return managedObjectContext
}()
//establishes the coordinator that connects the managed context with the persistent store
private lazy var psc: NSPersistentStoreCoordinator = { let coordinator = NSPersistentStoreCoordinator(
managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent(self.modelName)
do {
let options = [NSMigratePersistentStoresAutomaticallyOption : true]
try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: options) //establishes the actual persistent store
} catch {
print("Error adding persistent store.")
}
return coordinator
}()
//establishes the object model that interacts with the GUI object data model
private lazy var managedObjectModel: NSManagedObjectModel = {
let modelURL = NSBundle.mainBundle().URLForResource(self.modelName, withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()
Und dies ist der entsprechende Abschnitt in AppDelegate.Swift
let navigationController = window!.rootViewController as! UINavigationController
let listViewController = navigationController.topViewController as! ViewController
listViewController.coreDataStack = coreDataStack
Ich mag es. Simplistic und effizient – ggworean
es wirft auch Fehler für Fälle, in denen ich "self .___" verwende. Soll ich einfach alle Instanzen von sich selbst entfernen? – ggworean
@ggworean Yup! 'self' wird jetzt nicht verwendet, da alle Methoden und Variablen in' CoreDataStack' statisch sind. Sie sind jetzt Klassenvariablen anstelle von Instanzvariablen. Sie instanziieren CoreDataStack nicht mehr, Sie verwenden es stattdessen direkt. –