Macos 定义NSManagedObjectContext的正确方法?
在我早期使用Macos 定义NSManagedObjectContext的正确方法?,macos,swift,core-data,Macos,Swift,Core Data,在我早期使用CoreData的应用程序中,我使用以下方式定义我的NSManagedObjectContext: class MyViewController: NSViewController { lazy var moc: NSManagedObjectContext? = { let app = NSApplication.sharedApplication().delegate as! AppDelegate if let moc = app.ma
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
}
}()
// ....
}
但后来我下载了苹果的示例应用程序,名为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
}()
}
所以我只是想知道哪种方式是正确的——我假设这是苹果的方式:)——这就是为什么核心数据堆栈在默认情况下是在AppDelegate中定义的?有很多方法可以做到这一点,但最终涉及到可维护性 我发现的与苹果传统的其他产品搭配的最好方式是:
不要使用单件。虽然在一个项目开始时感觉很容易,但它往往会把你拖到一个角落里 我认为使用尽可能小的AppDelegate和特定的管理器会更干净。谢谢你的回答,依赖注入对我来说是个新词,现在就用谷歌搜索:)它只是意味着存在的对象传递了对刚刚创建的对象的引用。AppDelegate将引用传递给RootViewController,RootViewController传递给下一个视图控制器,等等。这不是一个非常复杂的概念。