gpt4 book ai didi

ios - 从多个 View Controller 输入数据时如何更新核心数据

转载 作者:行者123 更新时间:2023-11-30 12:26:50 24 4
gpt4 key购买 nike

这就是我的 View Controller 的设置方式:我有一个 Main View Controller ,其中包含水平 ScrollView 并充当容器。该容器还有另外三个 View Controller ,我们将它们称为 ABC,我在其中添加不同的数据:

  • A 中,我添加开始和结束时间,然后单击“下一步”
  • B 中,我添加消息字符串并单击“下一步”
  • C 中,我添加了更多数据并单击“完成”

C 中,当按下 Done 时,我想将所有三个 View Controller 中的数据保存到 Core Data。

我现在使用的方式是在 C 中,我只是使用委托(delegate)从 Main 调用 save() 方法。

Main内部,我只是从ABC调用IBOutlets > 保存到核心数据时。

我不确定这是否是正确的解决方案。
还有其他优雅的解决方案吗?我正在寻找一些可以轻松进行单元测试的东西。

最佳答案

在您的情况下,我会使用单例,尽管有些人可能不赞成,但我认为在您的情况下它可能会有所帮助:

final class DataCoordinator: NSObject {

private override init() {
print("Data Coordinator Initialized")
}
//Shared Instance:
static let appData = DataCoordinator()

var someVar: String = "" //public variable
fileprivate var mysteryNumber: Int = 0
...

并访问如下属性:

DataCoordinator.appData.someVar

确保您可以通过从应用程序委托(delegate)调用它来访问每个 VC 中的单例...

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
...
print(DataCoordinator.appData)
...
return true
}

您也可以让它处理 CoreData,也就是说您可以将上下文作为数据协调器中的共享属性,然后从任何 View Controller 访问它并使用典型函数保存它:

public func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
print("Data Saved to Context")
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
//use like this
DataCoordinator.appData.saveContext()

您可能还会发现编写函数或使用 didSet 来清除变量很方便。同样,您还可以让 DataCoordinator 从 CoreData 重新加载数据。我本人不太喜欢这种方法,但在适当的时候使用它,我强烈建议您在实现这种方法之前阅读有关单例的内容,否则您可能会遇到一些问题。

关于ios - 从多个 View Controller 输入数据时如何更新核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44086311/

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