2

私は依存性注入についてStackOverflowのthisスレッドを読んできました。そして、トップ評価の答えによって与えられたアイデアを本当に熱心に使用しています。しかし、私は私のケースで働くようにそれらを拡張するのに問題があり、どこでも解決策を見てきましたが、運がなかった。一連のビューコントローラを通してユーザーの選択を保持する方法はありますか?

は、簡単に言うと私の状況を説明するために、私が持って言うことができます:

のViewController A - ユーザーが写真
のViewController B取り上げている - そして、ユーザは、色を選ぶいるが
のViewController C - イメージと色がユーザーに表示される

依存注入を使用して、写真が選択されたらViewController AがViewController Bをナビゲーションコントローラに押し込むように指定する方法を見ることができます選択された写真は? ViewController Cで表示するにはどうすればよいですか?

また、ViewController Bに、色を選択したときにViewController Cをプッシュする必要があることをどのように伝える必要がありますか?

私が考えることができる唯一の解決策は、上記のスレッドのアイデアに厳密に従っています。ViewController Aに設定された「写真」プロパティをNavigation Controllerにプッシュすることです。しかし、これは私にとっては「悪いアイデア」のように思えます。なぜなら、一般的なViewController Bは、人生の唯一の目的は色を選択して移動することなので、写真には何の関心も持たないはずです。私は2つの可能性が出ているこの問題を解決しようとする際に

1 /すべてViewControllersバック中央の代理人に報告してください。

これは、依存性注入スレッドが言っていることに直面しているように見えますが、それはまだ最も簡単な方法です。私。 ViewController Aは写真を選んでデリゲートにそのことを伝えます。デリゲートは写真を後で保存し、ViewController Bをナビゲーションコントローラにプッシュします。色が選択されると、色が保存され、ViewController Cがプッシュされ、前に保存された色と写真の値が渡されます。

2 /いくつかの種類のプロパティオブジェクトをコントローラ間で渡します。

プロパティは 'color'と 'photo'プロパティで作成し、ViewController Aに渡すことができます。photoプロパティはViewController Aで設定され、オブジェクトはViewController Bに渡されます。 colorプロパティを渡してからViewController Cに渡して表示します。

どちらのオプションも私には「OK」のように見えますが、どちらもかなり正しいとは感じません。

多分、私は完全に誤解された依存性注入、その場合は教えてください!さもなければ、上の考えはすごく大きいでしょう。

ありがとうございます!

答えて

1

ここで私はそれをやるでしょう。

まず、ビューコントローラA、B、Cを保持するUINavigationControllerオブジェクトを使い始めます。最初に "A"がプッシュされ、次に "C"にプッシュされます。各ビューコントローラがビューコントローラの「スタック」にプッシュされると、それらはすべてメモリ内にあります。だから "C"を押すと "C"はUINavigationControllerに "A"と "B"(写真と色)のプロパティを尋ねるべきです。基本的に、UINavigationControllerは、Cと他の2つのコントローラ(AとB)の間のブリッジです。

+0

デビッドクイック返信ありがとうございます。これは間違いなくこのように動作するかもしれませんが、各コントローラはそのインスタンスでのみ動作するようにプログラムする必要があります。例えば、CがnavコントローラのobjectAtIndex:0を見てAを見つけさせると、(例えば)Aの前に何かを表示したい行を決定することはできません。 objectAtIndex:1代わりに。私はちょうど良いと一般的なすべてを保つ私が従うことができる巧妙なデザインパターンが必要であることを意味します。 – Mason

+0

CはAまたはBのインデックスを知る必要はありません。ナビゲーションコントローラに画像と色を尋ねます。たとえば、ナビゲーションコントローラには、-getPictureおよび-getColourのメソッドがあります。これらのメッセージをナビゲーションコントローラに送信すると、写真と色が返されます。ナビゲーションコントローラは、それぞれAとBから画像と色を取得する方法を知っています。 – David

+0

ナビゲーションコントローラをサブクラス化していますか?私はこれが悪い考えだったと読んでいますか? – Mason

1

私は完全な鎖A→B→Cが必要とは思わない。

Ainit方法で「選択」辞書に沿って通過する、Bを呼び出すことができ、それはB戻った後に制御を回復ときにCを呼び出すことができます。 BCは、 "選択(ピクチャ|カラー)&を選択辞書に保存する"ことを知っているだけです。 "

そしてviewDidAppear:に、Aは、単純な状態機械がありますない画像が選択されていない場合

  • を押しB(画像ピッカー)は色が選択されていない場合は他
  • C(カラーピッカー)
  • プッシュそれ以外の場合は画像を表示する
+0

こんにちはデイビッド、返事をありがとう。私は間違いなくこのようにすることができますが、実際の世界では写真の色を選ぶ前にユーザーがAを見るように戻すようUIの観点からはうまくいかないでしょう。 – Mason

0

誰もが同じことを思っている場合は、最後にオプション1/私の元の質問から。うまく動作し、メンテナンスが容易で、非常に汎用的で再利用可能なViewControllerを作成できます。

関連する問題