私は、ユーザーが一連の質問(家族の生活、健康など)に答えるいくつかの(おそらく8つの)調査スタイルのモジュールを備えたiOSアプリを書いています。一部のモジュールには12もの質問があります。各質問には、独自のペン先と独自のUIViewControllerがあります。回答は、理想的にはモジュールの最後にデータベースに書き込まれます。各モジュールは、1つのテーブルの1つのレコードに対応します。ユーザーは1人だけなので、レコードは1つになります。コアデータスタックをアプリデリゲートに残したい。現在、ViewControllerからCoreDataオブジェクトを作成しています。
私はどちらかを見つけるのに苦労してきました:
- 蓄積されたデータをUIViewControllersの長い線形チェーンに渡すための最良の方法。
- 別の解決策。
私は次の可能性を認識しています。
- 各パスで追加されるコレクションを使用して、ViewControllerのオーバーロードされた初期化子を介してデータデータをチェーンに渡します
- 再びコレクションを使用して、子ViewControllerのプロパティにデータを渡します
- アプリデリゲートでグローバル変数を使用します(私はこれをオプションとは真剣に考えていません)
- シングルトンクラスを使用する
少なくともデザインの観点からは、この状況ではシングルトンが最良の選択肢と考えられていると思いますが、これまでのところ、これほど多く(8、おそらくそれ以上)のシングルトンを使用している人のことは聞いたことがありません。彼らが非常に多くの議論を引き起こしているという事実は私を混乱させます。また、マルチスレッドがシングルトンと一緒に議論されるのを時々目にしますが、なぜそれらが連携するのか(もしそうなら)、そしてそれをどのように処理するのか理解できません。最後に、シングルトンを使用する場合、シングルトンまたはビューコントローラーからコアスタックを呼び出しますか?
編集:シングルトンを使用する場合の別の質問は、コアデータエンティティクラスで何をするかです。シングルトンクラスを使用してそれらを置き換えることはできますか、またはすべきですか?
上記への回答および/または解決策の代替案をいただければ幸いです。可能であれば、優れた設計と簡単/迅速な実装の間の妥協点を見つけたいと思います。アプリのデザインを変更することはできません(クライアントがレイアウトとフローを決定します)。