iPhone setDelegate到以前分配的对象

iPhone setDelegate到以前分配的对象,iphone,objective-c,ios,cocoa-touch,ios4,Iphone,Objective C,Ios,Cocoa Touch,Ios4,我正试图建立协议和授权 我有一个问题,我希望将委托设置为以前分配的对象 我正在分配的对象需要委托给协议。这是怎么做到的 这是我的密码 //SendSMS.h @protocol ModalViewDelegate - (void)didReceiveMessage:(NSString *)message; @end @interface SendSMS : UIViewController <UITextViewDelegate, UITextFieldDelegate> {

我正试图建立协议和授权

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

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

这是我的密码

//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
@protocol-ModalViewDelegate
-(void)didReceiveMessage:(NSString*)消息;
@结束
@界面发送SMS:UIViewController{
MessageOptions*MessageOptions;
登录页面*登录页面;
IBOutlet UITextField*电话号码;
IBUItextView*smsBody;
IBUIScrollView*滚动视图;
}
-(iAction)加载消息选项;
@结束
问题是当对象被推到堆栈上时。它的委托人不是它自己。但是在它之前的物体

有什么想法吗

更新


好的,我已成功将我的委托设置为
[self.navigationController.viewControllers objectAtIndex:0]
,这是rootviewcontroller。但我有3个编译器警告,说明在协议中找不到这些方法。他们是。。。。但它编译运行并工作。

决不允许实例将委托设置为自身。关于代理的整个想法是,您不需要知道代理是谁。据我所知,您的架构有三个层次

  • View1
    是根控制器,它创建并推送
  • View2
    做一些事情,然后创建和推送
  • View3
    ,希望将一些结果发送给相关人员
  • 我看到两种可能的解决办法

    解决方案1-学员

  • View3
    声明代理协议
    View3Delegate
  • View1
    符合
    View3Delegate
  • View1
    创建并按下
    View2
    时,也将其传递给
    self
    以保持
  • View2
    创建并按下
    View3
    时,也设置在步骤3中传递的委托
  • View3
    想要发送其结果时,给学员打电话并表示高兴
  • 解决方案2-通知

    在您的情况下,这可能是一个更优雅的解决方案,因为前面的解决方案有一个额外的步骤,
    View2
    需要处理一些东西,只是为了使
    View1
    View3
    工作,而与它的实际职责无关

  • View3
    声明一个名为
    View3ResponseNotification
    的通知
  • View1
    观察名称的通知
    View3ResponseNotification
  • View1
    创建并推送
    View2
    ,无需担心
  • View2
    轻松创建和推送
    View3
  • View3
    想要发送其结果时,它会发布
    View3ResponseNotification
    通知

  • 在创建委托的类中,可以将委托指定为实现协议的对象。检查我是否执行了,但它将委托设置为self。我无法委托给self,因为我有3个视图,希望视图3将数据传递给视图1。如果我可以跳过self,那么两次通过self将是毫无意义的,这就是我所做的,但得到了方法设置在堆栈之外的控制器。如果您有对view1或其控制器的引用,那么在创建view3时,将委托分配给该引用。我将给您打勾。这是我的想法,但我觉得有点冗长。因此,当视图2推送视图3时。它将DELEGATE设置为堆栈中索引为0的viewcontroller。它工作得非常好。我在上面遇到的问题是另一个xcode问题,简单的重新启动会停止编译器警告。