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

问题描述:

我有一个实体具有从5个视图控制器填充的属性。如何将来自多个视图控制器的数据保存到单个核心数据实体

该应用程序基本上是一个详细的形式的基于调查表5问题,并在每个5视图控制器组成一个问题,它的设定的答案选项的。在前4个,用户有多个选择题。在最后一个问题中,用户可以从一组选项中选择多个值。

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

为了捕捉用户的回答,我已经创建了一个答案第4个问题,与第五实体,这样我可以捕获集中的用户为第5问题选择答案选项的关系的命名回答用绳子实体属性。

我还需要用户选择保存为,当用户在用户已回答所有问题一气呵成,从第一次的问题移动到第2至第3等,而不是。

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

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

我一直在寻找下列选项 -

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

请指教。

+0

选项1是我会做的。 – Paulw11

我可以看到这样做的最简单的方法是只转移所有的答案沿途到使用准备(对于赛格瑞:)方法下一个视图控制器。你会说

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中,然后清除变量中的值。