Swift-如何将托管对象上下文传递给不同的视图控制器

时间:2019-04-27 20:37:15

标签: swift core-data nsmanagedobjectcontext

我将核心数据栈放在自己的文件中,如下所示。我读到使用依赖注入是传递托管对象上下文的最佳方法。因此,在少数几个VC中,我声明以下属性:

var managedObjectContext: NSManagedObjectContext?

现在,棘手的部分是将moc从我的堆栈中移到不同的VC。对于单身人士来说,这似乎是个好地方,但是假设这是个坏主意,我想我会在CoreDataStack中使用以下代码:

let controller = self.window!.rootViewController as! ViewController
let context = self.persistentContainer.viewContext
controller.managedObjectContext = context   

但是,这使我有几个问题:
1)我应该在CoreDataStack中的哪个位置包含以上代码?在App Delegate中,它将在didFinishLaunchingWithOptions中使用,但是现在这不是一个真正的选择。
2)为需要上下文的每个vc编写上面的代码似乎很糟糕。我想我可以遍历所有VC。我也看到过使用didSet通过的moc,但这也不是很正确。

CoreData堆栈

class CoreDataStack {    
lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "Model")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
         if let error = error as NSError? {
             fatalError("Unresolved error \(error), \(error.userInfo)")
         }
     })
     return container
}()

func saveContext () {
    let context = persistentContainer.viewContext
    if context.hasChanges {
        do {
            try context.save()
        } catch {
            let nserror = error as NSError
            fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
        }
    }
}

0 个答案:

没有答案