iPhone setDelegate到以前分配的对象

时间:2011-08-05 12:30:29

标签: iphone objective-c ios cocoa-touch ios4

我正在尝试设置协议和委派。

我有一个问题,我希望将委托设置为先前分配的对象。

我分配的对象需要委托协议。这是怎么做到的?

继承我的代码。

// 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个编译器警告声明在协议中找不到这些方法。他们是......但它编译运行和工作。

1 个答案:

答案 0 :(得分:2)

永远不要让实例将委托设置为自己。代表们的全部想法是,您不需要知道代表是谁。据我了解你的架构,它有三个层次;

  1. View1是根控制器,它创建并推送;
  2. View2执行某些操作,然后创建并推送;
  3. View3想要向有关人员发送一些结果。
  4. 我看到两种可能的解决方案。

    解决方案1 ​​ - 代表

    1. View3声明委托协议View3Delegate
    2. View1符合View3Delegate
    3. View1创建并推送View2时,也会self传递给View2
    4. View3创建并推送View3时,还会设置在步骤3中传递的委托。
    5. View2想要发送结果时,请致电代表并保持高兴。
    6. 解决方案2 - 通知

      在您的情况下,这可能是一个更优雅的解决方案,因为之前的解决方案有一个额外的步骤View1需要处理内容才能使View3View3正常工作,与它的真正责任无关。

      1. View3ResponseNotification声明名为View1的通知。
      2. View3ResponseNotification观察名称View1的通知。
      3. View2无忧无虑地创建并推送View2
      4. View3无忧无虑地创建并推送View3
      5. View3ResponseNotification想要发送结果时,会发布{{1}}通知。