0

以前の質問 ( here ) での SO フォークの提案により、プライマリ モデル オブジェクトをシングルトンにして、「メイン」ビュー コントローラーと「設定」ビュー コントローラーの間で共有しようとしています。このセットアップは完成したら素晴らしいものになると思いますが、MVC に適した方法でレイアウトすることに問題があります。

現時点では、私の設定ビューは現在、viewDidLoad の設定が存在しない場合は (NSUserDefaults を介して) 初期化し、選択されたボタンに応じてサブビューをレイアウトし (設定ビューはすべての設定ボタン アウトレットを保持します)、ボタンが押されたときにボタンの状態の辞書を更新します。 、更新されたものを NSUserDefaults に保存し、設定パネルのサブビューを更新し、ボタン設定をシングルトンに送信します。

一方、私のシングルトンは、ボタン設定を、モデルオブジェクトが理解して作成された情報でモデルオブジェクトを更新する設定の辞書に変換し、メインビューコントローラーがコレクションビューを新しいモデルオブジェクトで更新できるようにします。

サブビューのレイアウトは、設定ビューで処理する必要があると考えています。私の質問は、設定ビューに問題が多すぎますか? もしそうなら、シングルトン/モデル オブジェクトのボタンの状態を更新し (したがって、ビューから UIButton の配列を受け取る)、NSUserDefaults 関連のタスクを処理する必要がありますか?

4

1 に答える 1

1

私だけかもしれませんが、これはすべて不必要に複雑に聞こえます。

設定情報を処理するモデルがある場合、ビューが NSUserDefaults を直接処理するのはなぜですか? モデルの仕事は情報を管理することです。設定情報の「モデル」が本質的に辞書のようなものである場合、つまりキーと値のペアがたくさんある場合、少なくとも設定に関しては NSUserDefaults が必要なすべてのモデルである可能性があります。別の方法として、設定情報を含むモデルを作成するのに苦労した場合は、そのモデルを使用して情報を保存および取得する必要があります。モデルの背後に隠れて、情報に直接アクセスしないでください。

したがって、次のいずれかを実行できます。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL foo = [defaults boolForKey:@"fooSetting"];

「foo」の設定にアクセスする必要がある場所ならどこでも、またはモデル内で一度アクセスして、その設定が必要なときにアプリ内の他のすべてのものをモデルにアクセスさせることができます。どちらかは問題ありませんが、両方を行うことは避けてください。

余談ですが、あなたの他の質問に答えた人々が何を言ったかは気にしません。複数のView Controllerからモデルにアクセスできるようにするためだけに、モデルをシングルトンにする必要はありません。ここでは、良いシングルトンと悪いシングルトンの議論全体については触れませんが、Google で少し調べて、少なくとも問題を理解しておいてください。

于 2013-07-01T04:52:57.603 に答える