2011-08-05 11 views
0

私はプロトコルと委任を設定しようとしています。iPhone setDelegateを以前に割り当てられたオブジェクト

私は以前に割り当てられたオブジェクトにデリゲートを設定したいという問題があります。

私が割り当てているオブジェクトは、プロトコルに委任する必要があります。これはどうですか?

Heres my code。

//SendSMS.h

@protocol ModalViewDelegate 

- (void)didReceiveMessage:(NSString *)message; 

@end 

@interface SendSMS : UIViewController <UITextViewDelegate, UITextFieldDelegate> { 


    MessageOptions *messageOptions; 
    LoginPage *loginPage; 
    IBOutlet UITextField *phonenumber; 
    IBOutlet UITextView *smsBody; 
    IBOutlet UIScrollView *scrollview; 

} 

-(IBAction)LoadMessageOptions; 

@end 

オブジェクトがスタックにプッシュされたときに問題があります。その代議者は自分のものではありません。その前のオブジェクトのものです。

アイデア?

UPDATE!

私は代理人を[self.navigationController.viewControllers objectAtIndex:0] rootviewcontrollerに設定することができました。しかし、私はメソッドがプロトコルで見つけられないと述べる3つのコンパイラの警告があります。彼らは....しかし、それは実行と動作をコンパイルします。

+0

作成するクラスでは、デリゲートをプロトコルを実装するオブジェクトとして割り当てることができます。 http://www.iprav.in/?p=57 –

+0

を確認してください。ただし、代理人を自己に設定しています。私は3つのビューを持っているので、私は自己に委任することはできません。ビュー3にデータを渡して1を表示させたいのですが、それをスキップすることができれば無意味です。メソッドはスタックから設定されます。 – MrPink

+0

view1またはそのコントローラへの参照がある場合は、view3を作成するときにその参照にデリゲートを割り当てます。 –

答えて

2

インスタンスにデリゲートを設定しないでください。デリゲートとのアイデア全体は、デリゲートが誰であるかを知る必要はないはずです。私はあなたのアーキテクチャを理解しているので、それは3つのレベルの深さです。

  1. View1は、ルートコントローラであり、作成してプッシュします。
  2. View2いくつかのことを行い、作成してプッシュします。
  3. View3これは、関係者に何らかの結果を送ることを望んでいます。

2つの解決策があります。

ソリューション1 - 代表

  1. ましょうView3は、デリゲートプロトコルView3Delegateを宣言します。
  2. View1View3Delegateに従わせてください。
  3. View1が作成されてプッシュすると、View2はそれを保持するためにselfに渡します。 View2が作成しView3
  4. View3が、それは結果だ送りたいステップ3で渡されたデリゲートを設定押すと
  5. は、デリゲートを呼び出し、幸せになります。

ソリューション2 - 通知

以前のソリューションはView2がちょうどView1View3作品を作るために原料を処理する必要がある余分なステップを持っているので、これは、おそらくあなたのケースでは、よりエレガントなソリューションですそれは本当の責任ではありません。

  1. View3View3ResponseNotificationという名前の通知を宣言してみましょう。
  2. View1にはView3ResponseNotificationという通知があります。
  3. View1は心配無くView2を作成してプッシュします。
  4. View2は、心配することなくView3を作成してプッシュします。
  5. View3が結果を送信したい場合は、View3ResponseNotification通知を送信します。
+0

私はあなたに目を向けるでしょう。これは私がそれをやっていると思った方法でしたが、少し長いと思いました。 View 2がView 3を押すと、スタックのindex:0にあるviewcontrollerに設定を解除します。それは本当にうまくいく。私が上に持っていた問題は、簡単なリブートがコンパイラの警告を止めたもう一つのxcodeの問題でした。 – MrPink

関連する問題