ก่อนหน้านี้ในแอปของฉันด้วย 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 เป็นค่าเริ่มต้น