在我的应用程序中,我将Core Data堆栈从AppDelegate中移出并移动到自己的名为LiftEventDataManager
的类中。有几个类我可以在其中获得对此堆栈的引用,当然,每次创建新的NSManagedObjectContext
时都会创建。这些引用用于执行诸如从数据库中提取一些默认应用程序数据以在视图中显示的内容(例如,用户选择的列表)。
当显示初始viewController
时,我的viewModel
会要求LiftEventDataManager
新对象支持该视图。用户的输入用于设置此对象的属性,当它们完成时,我想保存该对象。但是,该对象未被保存。
当用户点按保存时,viewModel
会使用其对LiftEventDataManager
的引用并调用此函数(Swift 2.3):
func saveLiftEvent() {
do {
try moc!.save()
} catch {
let saveError = error as NSError
print("\(saveError), \(saveError.userInfo)")
}
NSNotificationCenter.defaultCenter().postNotificationName("LiftEventDidSave", object: nil)
}
我相信该对象未被保存,因为它是由我的viewModel
创建的,要求LiftEventDataManager
提供一个新的managedObjectContext
对象,但保存被称为我认为LiftEventDataManager
正在获取对核心数据堆栈的新引用。我想我可以使用:
managedObjectContext
let moc = newLiftEvent.managedObjectContext
然后将其传递给saveLiftEvent(moc: NSManagedObjectContext)
。
我是否回答了自己关于如何正确保存或者我的设计存在缺陷的问题?请记住,我不想使用单身人士。
答案 0 :(得分:0)
您需要通过某种方式传递NSManagedObjectContext
。单身是一种方法,但它肯定不是唯一的方法。
听起来您每次需要时都会创建LiftEventDataManager
的新实例。您可以使用某种依赖注入来传递现有实例,而不是创建新实例吗?
如果视图模型具有对数据管理器的引用,那么这可能是集中事物而不构成单例的好地方。