2011-08-05 31 views
0

我正在嘗試設置協議和委派。iPhone setDelegate以前分配的對象

我有一個問題,我希望設置一個委託給以前分配的對象。

我分配的對象需要委託給一個協議。這是如何完成的?

繼承人我的代碼。

//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 

問題是,當該對象被壓入堆棧。它的代表不是它的自我。而是它之前的對象。

任何想法?

更新!

好吧,我設法設置我的代表[self.navigationController.viewControllers objectAtIndex:0]這是rootviewcontroller。但是我有3個編譯器警告,指出這些方法在協議中找不到。他們是......但它編譯運行和工作。

+0

在您創建它的類中,您可以將委託指定爲實現該協議的對象。檢查http://www.iprav.in/?p=57 –

+0

我做了,但它設置代表自我。我不能委託給自己,因爲我有3個視圖,並希望視圖3傳遞數據來查看1.如果我可以跳過它,這將是毫無意義的通過自我兩次,這是我做的,但讓控制器在哪裏方法被設置在堆棧中。 – MrPink

+0

如果您有對view1或其控制器的引用,那麼當您創建view3時,將該委託分配給該引用。 –

回答

2

永遠不要讓實例將代理設置爲自己。與代表的整個想法是,你不需要知道誰是代表。據我瞭解你的架構它是三層深的;

  1. View1是根控制器,它創建並推送;
  2. View2做一些東西,然後創建和推動;
  3. View3想要發送一些結果給任何有關的人。

我看到兩種可能的解決方案。

溶液1 - 代表

  1. View3聲明一個代理協議View3Delegate
  2. View1符合View3Delegate
  3. View1創建並推View2也通過它self來堅持。
  4. View2創建和推動View3也設置在步驟3
  5. View3要發送它的結果通過了委託,調用該委託和快樂。

解決方案2 - 通知

這可能是你的情況更優雅的解決方案,因爲以前的解決方案有一個額外的步驟,其中View2需要處理的東西只是爲了讓View1View3工作,與它的真正責任無關。

  1. View3聲明名爲View3ResponseNotification的通知。
  2. View1觀察通知的名稱View3ResponseNotification
  3. View1創建和推動View2無後顧之憂。
  4. View2創建和推動View3無後顧之憂。
  5. View3想要發送它的結果時,它發佈了View3ResponseNotification通知。
+0

我給你打勾。這是我認爲這樣做的方式,但我認爲它有點冗長。所以當視圖2推動視圖3時,它將視頻控制器設置爲堆棧中索引爲0的視圖控制器。它工作得很好。我上面遇到的問題是另一個xcode問題,其中一個簡單的重新啓動停止了編譯器警告。 – MrPink