4

現在、私はシングルトンクラスを使用していくつかの作業を行っていますが、もっと良いものがあるかどうか疑問に思っています。

完全に動的なワークフローを持つアプリがあります。ナビゲーションコントローラーを使用しますが、ビューコントローラーの順序は、サーバーからダウンロードされたデータに完全に依存します。

ワークフロー全体がダウンロードされ、配列に保存されます。

アプリの「メインメニュー」画面にはいくつかの選択肢(設定、最近など)がありますが、これらは固定されていますが、そのうちの1つは動的なものです。それは常に同じタイプのViewControllerで始まりますが、それ以降は選択したものによって異なります。

説明

これらの動的コントローラーには4つの異なるタイプがあります。

  • 単一の選択および詳細インジケーターを備えたテーブルビューコントローラー。
  • 複数の選択とチェックマークが付いたテーブルビューコントローラ。
  • テキストフィールドとキーボードを備えたViewController。
  • サーバー上のアカウントの検索に使用されるViewController(および他の関連するVC)。

メインメニューの[新しいイベント]オプションを押すと、メニューはシングルトン(EventManager)に移動し、新しいイベントを開始するように指示します。

次に、シングルトンはnavコントローラーで単一選択の動的ビューをプッシュし、初期オプションを提供します。

ここから、シングルトンはすべての選択を取得し、次に必要なビューのタイプを決定します。

これが理にかなっていることを願っています

とにかく、私はそれがシングルトンであるべきではないと思うので、ここでのシングルトンパターンは好きではありません。

私が欲しいのは、ViewControllerから作成できるクラスです。このクラスは、さまざまなViewControllerのロード間のデータのプッシュとポップおよびフローを制御します。次に、メインメニューに戻ると、このクラスがなくなる可能性があるため、毎回新しいクラスを作成します。

これを行うために私が見ることができるパターンはありますか?それとも、今のようにシングルトンに固執する必要がありますか?

これが理にかなっていることを願っています。

編集

これにUIPageViewControllerを使用できますか?次に、UIPageViewControllerのデータソース/デリゲートオブジェクトが、現在使用しているシングルトンの代わりになります...または何か?

ツイッターリクエストからの写真の追加

ここに画像の説明を入力してください

フローに沿った各VCは、その前にどのカムがあり、次に何が来るかを認識していません。シングルトンにコールバックして、「この値が選択されました」または「このテキストが入力されました」などと言うだけです。

次に、シングルトンはその情報を保存し、次に来るものを計算して、次のVCをスタックにプッシュします。

ユーザーが戻って何かを変更できるように、スタックに沿って戻ることができる必要があります...

シングルトンの使用が好きではないので、すべてが機能しています。

4

1 に答える 1

1

重要度の高い順にここにたくさんのコメントがあります。

ここで説明したことはすべて、ネーミングに至るまで、本当に良い音に聞こえます。「EventManager」は、システム内のすべての「イベント」を管理しているように聞こえます(したがって、というクラスがあると思いますがEvent、それは小さな問題であり、名前はまだ非常に優れている可能性があります)。他にも良いデザインはありますが、問題ありません。

私はこれがにぴったりのように見えることに同意しますUIPageViewController。あなたは確かにそれが適切であるかどうかを確認するためにそれを調査する必要があります。可能であれば、組み込みのコントローラーを使用するのはいつでも便利です。

シングルトンを強く避ける理由はありません。これらはiOS開発の自然な部分であり、優れたCocoaデザインではかなり一般的です。それらは一般的に「共有」シングルトンである必要があります(オーバーライドする「厳密な」シングルトンを作成しないでください+allocWithZone:)。これにより、真の「シングルトン」ではなく、アクセスしやすいインスタンスが作成されます。これは仕事のようなものNSNotificationCenterであり、しばしば非常に良いパターンです。

シングルトンは、システムのランダムな部分の多くが直接アクセスする必要があり、それらをすべての人に渡す必要がある場合に最適です(特に、オブジェクトを必要としないためにオブジェクトを渡す必要がある部分の多くの場合)。 。もう一度、考えてNSNotificationCenterください。そのユーザーがほとんど隣接している場合(つまり、実際にそれを必要とするために渡すほとんどのオブジェクト)、プログラムの開始時に作成して渡します。それはあなたの状況のように聞こえるので、それについてのあなたの直感は良いようです。シングルトンを解除して渡すだけです。簡単に交換できます。

しかし、私は間違いなく掘り下げUIPageViewControllerます。それはあなたの問題と非常によく一致する可能性があります。

于 2012-12-12T15:40:47.277 に答える