1

私は完全に迷っています。

問題は、ウィザードでビューコントローラーを介してデータを渡すことです。私のプロジェクトには 4 つのビューコントローラーが含まれています。

  • Step1ViewController、名前を記入する可能性
  • Step2ViewController、ニックネームを入力可能
  • Step3ViewController、メールアドレス入力可能、
  • Step4ViewController、関心を埋める可能性、終了

すべてのビュー コントローラーは、ナビゲーション コントローラーにプッシュされます。ナビゲーションツールバーのバーボタンをクリックすると、次のステップに進むことができます。私が達成したいのは、ステップ内のすべてのデータを収集し、最後のステップで NSManagedobject を作成して保存することです (終了ボタンをクリックして)。そのため、ユーザーが手順 2 で終了し、アプリを再起動すると、オブジェクトは保存されません。そのため、彼はウィザードを再起動します。コア データに personobject がある場合、別のビューが読み込まれます (これはデリゲート クラスの条件です)。

単純なモデル スキーマがあれば、データをコントローラーに渡すのは prepareForSegue メソッドを使用して簡単に行うことができます。すべての変数を収集し、コア データ オブジェクトを作成して保存します。データを前のステップに戻すために、プロトコルを使用できます。

しかし、私のアプリケーションでは、モデル スキーマはもっと複雑です。私のウィザードには約 18 のステップが含まれており、Person モデルに関連付けられたモデル (trainingsplan、interests など) が多数あるため、変数内のすべてのデータを収集し、最後のステップでそれらすべてを結合することは、実際には良い方法ではないと思います。

これを行う最善の方法は何ですか?

いくつかの手順と 2 つのモデル (個人と興味 (1-2-多)) を含むウィザード サンプル アプリケーションをアップロードしました。うまくいけば、これはそれをより明確にするでしょう。コードを自由に変更してください: https://github.com/stalkert/WizardPrototype

4

1 に答える 1

0

2 つのアイデアが思い浮かびますが、それぞれに長所と短所があります。どちらも、最終的に必要なさまざまなデータをすべて保持する変更可能な辞書の概念を使用しています。さらに、NSNumber オブジェクトを使用して key='step' を追加します。

1) 最初にすべてのビュー コントローラーが存在しないと仮定すると、コントローラーは最初にディクショナリを作成し、ディクショナリに提供するデータを追加し、「ステップ」を 2 に設定します。次に、新しい viewController を作成して実行し、プロパティでディクショナリを渡します。2 つ目は、ステップが正しいことを確認し、必要なものを追加してから、それを別のコントローラーに渡します。ここでの「ステップ」は、辞書が実際にあるべき段階にあることのテストとして機能します。

2) ビュー コントローラーが既にインスタンス化されていると仮定すると、上記と同じ「ステップ」の概念を使用しますが、通知を使用します。最初のステップが完了したら、ディクショナリをデフォルト、クラスまたはシングルトン オブジェクト、または appDelegate (プロパティ) に保存します。通知を送信し、完全な辞書または次のステップを提供する数値である userInfo を追加します。ステップ 3 を実行する必要があるコントローラーは、ターンアップしたことを確認できるため、アクティブになる必要があります (UITabBarController タブを自動的に切り替えるなど)。

いずれの場合も、最後のステップが完了したら、辞書をリポジトリを管理するクラスに送信するか、直接送信します。

于 2012-09-22T12:18:57.613 に答える