Раньше в своих приложениях с CoreData
я определял NSManagedObjectContext
следующим образом:
class MyViewController: NSViewController {
lazy var moc: NSManagedObjectContext? = {
let app = NSApplication.sharedApplication().delegate as! AppDelegate
if let moc = app.managedObjectContext {
return moc
} else {
return nil
}
}()
// ....
}
Но потом я скачал образец приложения Apple под названием Eartquakes
, и там NSManagedObjectContext
было так:
import Cocoa
class CoreDataStackManager {
class var sharedManager: CoreDataStackManager {
struct Singleton {
static let coreDataStackManager = CoreDataStackManager()
}
return Singleton.coreDataStackManager
}
// persistenStoreCoordinator etc...
И в ViewController:
class ApplesViewController: NSViewController {
private lazy var managedObjectContext: NSManagedObjectContext = {
let moc = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
moc.persistentStoreCoordinator = CoreDataStackManager.sharedManager.persistentStoreCoordinator
return moc
}()
}
Поэтому мне просто интересно, какой путь является правильным - я предполагаю, что это путь Apple :) - и почему Core Data Stack определен в AppDelegate по умолчанию?