私は、コアデータを堅固に把握しようとしており、大部分が子/親コンテキストとフェッチ結果コントローラを使用しています。しかし、私はCoreDataStackについています。私は、プログラムの残りの部分で属性 'context'を呼び出そうとしています。私は最初のビューでコンテキストを印刷することはできますが、ナビゲーションバーを介してアプリ全体に持続しているようには見えません。アンラッピング後にCoreDataStack内のManagedObjectContextが返されない
これは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)!
}()
であり、これはこれは本当にあなたの問題を解決していませんが、私は別のソリューションを提供AppDelegate.Swift
let navigationController = window!.rootViewController as! UINavigationController
let listViewController = navigationController.topViewController as! ViewController
listViewController.coreDataStack = coreDataStack
私はそれが好きです。シンプルで効率的な – ggworean
私は "self .___"を使う場合にもエラーを投げます。私は単に自分のインスタンスもすべて削除する必要がありますか? – ggworean
@ggworean Yup! 'self'は' CoreDataStack'のメソッドと変数のすべてが静的なので使用されません。それらはインスタンス変数ではなくクラス変数です。あなたはもはや 'CoreDataStack'をインスタンス化せず、代わりに直接使用します。 –