0

5つのビューコントローラからデータを取り込む属性を持つエンティティがあります。複数のビューコントローラから単一のコアデータエンティティにデータを保存する方法

アプリは、基本的に5つの質問の詳細なフォームベースのアンケートであり、5つのビューコントローラのそれぞれは、1つの質問と回答の選択肢のセットで構成されています。最初の4つでは、ユーザーは複数の選択問題を持っています。最後の質問では、オプションのセットから複数の値を選択できます。

私は、各ビューコントローラに対して、そのビューコントローラに表示されるオプションのエンティティをそれぞれ管理しています。

ユーザーの回答を取得するために、最初の4つの質問に対する回答の文字列属性と5番目の質問に対するユーザーの選択肢のセットを取得できるように5番目のエンティティとの関係という名前のエンティティを作成しました。

また、ユーザーが1番目の質問から2番目から3番目に移動したときなどに、ユーザーの選択を保存する必要があります。

また、最初の質問の画面が表示されたら、回答を破棄することもできます。

これを達成する最良の方法は何ですか?

私は、次のオプションを探していた -

  1. は、最初の質問・ビュー・コントローラに来る前に回答エンティティのレコードを作成します。また、管理されたオブジェクトコンテキスト(moc)。次に、5つのView Controllerのそれぞれにmocプロパティを保存し、最初のコントローラからAnswerコントローラに5番目のコントローラにアクセスする前に作成したmocを渡します。ユーザーがある質問から次の質問に移動するたびにこのモックに保存します。
  2. DataCollector型のSingletonクラスを作成します。ここには、Answerエンティティレコードを作成するinitメソッドと、mocを作成してmocに保存するメソッドがあります。そして、各質問からこの回答管理オブジェクトを参照し、同じMOCを共有します。

アドバイスをしてください。

+0

オプション1は私がやることです。 – Paulw11

答えて

0

私が見ることができる最も簡単な方法は、prepare(segue :)メソッドを使用して、次のView Controllerにすべての回答を転送することです。あなたは、次のUIViewに移動したときのUIViewのために対応するので、ビューコントローラで、クラス宣言の後にあなたは、単に、あなたが値を格納する変数を宣言することができます

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     let secondScene = segue.destination as! (nextController) 
     secondScene.answerQuestion1(declared variable in nextController) = (value you are transferring) 
     } 

を言うことによってこれを行うだろう次の質問、

class QuestionTwo: UIViewController { 

    var answerQuestion1 

    override func viewDidLoad() { 
     super.viewDidLoad() 

ビューコントローラのすべてのためにこれを繰り返し、そしてあなたは第五にいる時間では、あなたは、最初の4つの質問だけでなく、5日にすべての答えを持っていますCoreDataに保存して、変数から値をクリアすることができます。

関連する問題