如何将数据从多个视图控制器保存到单个核心数据实体中



我有一个实体,它的属性是从 5 个视图控制器填充的。

该应用程序基本上是一个基于表单的详细问卷,包含 5 个问题,5 个视图控制器中的每一个都包含一个问题及其一组答案选项。在前 4 个中,用户有多项选择题。在最后一个问题中,用户可以从选项集中选择多个值。

我为每个视图控制器维护了一个实体,以便为该视图控制器显示选项。

为了捕获用户的答案,我创建了一个名为 Answer 的实体,其中包含前 4 个问题的答案的字符串属性以及与第五个实体的关系,以便我可以捕获用户为第 5 个问题选择的答案选项集。

当用户从第一个问题移动到第二个问题再到第三个问题时,我还需要保存用户选择,依此类推,而不是在用户回答所有问题时

一次性保存。此外,如果用户弹出第一个问题的屏幕,则可以丢弃答案。

实现它的最佳方法是什么?

我正在寻找以下选项 -

  1. 在转到第一个问题视图控制器之前创建答案实体记录。也是托管对象上下文 (moc(。然后,我在 5 个视图控制器中的每一个中保留一个 moc 属性,然后将在进入第一个控制器之前创建的 moc 从第一个控制器传递到第五个控制器以及 Answer 托管对象。每当用户从一个问题移动到下一个问题时,请保存在此 moc 中。
  2. 创建一个 DataCollector 类型的单例类,其中我有一个 init 方法来创建应答实体记录和用于创建 moc 并保存到 moc 的方法。然后,从每个问题中,我都引用了此答案托管对象,并且还共享相同的 moc。

请指教。

我能看到的最简单的方法是使用 prepare(for segue:( 方法将所有答案传输到下一个视图控制器中。你会说

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let secondScene = segue.destination as! (nextController)
secondScene.answerQuestion1(declared variable in nextController) = (value you are transferring)
}

当你移动到下一个UIView时,在视图控制器中,在类声明之后,你可以简单地声明你想要存储值的变量,所以对于下一个问题对应的UIView,

class QuestionTwo: UIViewController {
var answerQuestion1
override func viewDidLoad() {
super.viewDidLoad()

对所有视图控制器重复此操作,当您到达第 5 个时,您将获得前 4 个问题和第 5 个问题的所有答案,此时您可以将其保存在 CoreData 中,然后清除变量中的值。

最新更新