我正在尝试设置协议和委派。
我有一个问题,我希望将委托设置为先前分配的对象。
我分配的对象需要委托协议。这是怎么做到的?
继承我的代码。
// 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 :(得分:2)
永远不要让实例将委托设置为自己。代表们的全部想法是,您不需要知道代表是谁。据我了解你的架构,它有三个层次;
View1
是根控制器,它创建并推送; View2
执行某些操作,然后创建并推送; View3
想要向有关人员发送一些结果。我看到两种可能的解决方案。
解决方案1 - 代表
View3
声明委托协议View3Delegate
。View1
符合View3Delegate
。View1
创建并推送View2
时,也会self
传递给View2
。View3
创建并推送View3
时,还会设置在步骤3中传递的委托。View2
想要发送结果时,请致电代表并保持高兴。解决方案2 - 通知
在您的情况下,这可能是一个更优雅的解决方案,因为之前的解决方案有一个额外的步骤View1
需要处理内容才能使View3
和View3
正常工作,与它的真正责任无关。
View3ResponseNotification
声明名为View1
的通知。View3ResponseNotification
观察名称View1
的通知。View2
无忧无虑地创建并推送View2
。View3
无忧无虑地创建并推送View3
。View3ResponseNotification
想要发送结果时,会发布{{1}}通知。