2012-02-17 13 views
1

ここは私の状況です。デリゲートを割り当てる適切な方法

私はViewControllerAを持っており、現在のモダンビューコントローラを通してViewControllerBをロードすることができます。今、ViewControllerBは、後でプッシュViewControllerCを見ることができます。 ViewControllerBViewControllerCは同じクラスです。 ViewControllerCを表示するときに、ViewControllerAを代理人に割り当てるにはどうすればよいですか?

現在、私はViewControllerBViewControllerCの代理人に割り当てていますが、これはViewControllerAを呼び出し、これは正しくないと感じています。コマンドの連鎖:ViewControllerC - >ViewControllerB - >ViewControllerA

ありがとうございます。

+0

あなたはそれが正しいと感じませんか?どんなオブジェクトも、絶対に必要とするだけの他のオブジェクトについて「知っている」だけであるべきです。 –

答えて

1

デザインがちょっと不器用な気がします。デリゲートを連鎖の下に戻す代わりに、ViewControllerBとViewControllerCの両方のデリゲートを(同じクラスであるため)viewControllerAに代入するだけではいかがですか。両方このようにViewControllerC

c.delegate = self.delgate 
[self.navigationController pushViewController:c animated:YES] 

をプッシュする前にViewControllerBで

b.delegate = self 
[self presentModalViewController:b animated:YES]; 

:CはViewControllerBを提示する前にB.

と通信する必要がない限り、チェーンを渡す必要はありませんB-> AとC-> A

0

あなたのデザイン(C-> B-> A)は、UIフローのロジックに従うので、それほど悪くはありません。 (あなたはCからAに直接ジャンプしていません)。もしあなたが好きなら、代理人としてAを割り当てることもできます。 Aがメモリに常駐していることを確認してください(モーダルビューコントローラは自動でなければなりません)。

+0

たとえそれが読み込まれたとしても、それはviewcontrollerのビューだけが処理され、viewcontroller自体は処理されません - 変数はその値を保持します –

+0

もちろん@rokjarcですが、getがアンロードされ、CまたはBがコールバックを必然的にクラッシュする存在である。私はこれが起こった。非同期要求で – Mundi

+0

@Munci:はい、そうです。とにかく:それは本当に何かが本当に存在していることを確認することは、それがメッセージを送信する前にしても、アドレスが取り消される可能性がわずかな場合でも。 –

関連する問題