0

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

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

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

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

当用户从第一个问题转到第二个问题到第三个问题时,我还需要保存用户选择,而不是在用户回答所有问题时一次性保存。

此外,如果他弹出第一个问题的屏幕,用户可以放弃答案。

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

我正在寻找以下选项 -

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

请指教。

4

1 回答 1

0

我能看到的最简单的方法是使用 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 中,然后清除变量的值。

于 2017-07-11T22:15:14.257 回答