gpt4 book ai didi

swift - 如何在不使用单例的情况下保存正确的 NSManagedObjectContext?

转载 作者:行者123 更新时间:2023-11-30 12:45:53 25 4
gpt4 key购买 nike

在我的应用中,我将 Core Data 堆栈从 AppDelegate 移至其自己的名为 LiftEventDataManager 的类中。在一些类中,我获得了对该堆栈的引用,当然,每次我执行操作时都会创建一个新的 NSManagedObjectContext 。这些引用用于执行诸如从数据库中提取一些默认应用程序数据以呈现在 View 中之类的操作(例如用户选择的列表)。

当呈现初始 viewController 时,我的 viewModel 向我的 LiftEventDataManager 请求一个新对象来支持 View 。用户的输入用于设置该对象的属性,完成后,我想保存该对象。但是,该对象并未被保存。

当用户点击“保存”时,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 调用的,我认为它正在获取对核心数据堆栈的引用。我想我可以通过以下方式获取对象的 managementObjectContext:

let moc = newLiftEvent.managedObjectContext

然后将其传递给 saveLiftEvent(moc: NSManagedObjectContext)

我是否回答了我自己关于如何正确保存它的问题,或者我的设计是否存在缺陷?请记住,我不想使用单例。

最佳答案

您需要有某种方法来传递NSManagedObjectContext。单例是一种方法,但它肯定不是唯一的方法。

听起来您每次需要时都会创建一个 LiftEventDataManager 的新实例。您可以使用某种依赖注入(inject)来传递现有实例,而不是创建新实例吗?

如果 View 模型具有对数据管理器的引用,那么这可能是集中事物而无需创建单例的好地方。

关于swift - 如何在不使用单例的情况下保存正确的 NSManagedObjectContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com