0

我有一個實體具有從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

回答

0

我可以看到這樣做的最簡單的方法是隻轉移所有的答案沿途到使用準備(對於賽格瑞:)方法下一個視圖控制器。你會說

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

相關問題