iPhone setDelegate 到先前分配的对象
Posted
技术标签:
【中文标题】iPhone setDelegate 到先前分配的对象【英文标题】:iPhone setDelegate to a previously allocated object 【发布时间】:2011-08-05 12:30:28 【问题描述】:我正在尝试设置协议和委派。
我有一个问题,我希望为之前分配的对象设置一个委托。
我分配的对象需要委托给一个协议。这是怎么做到的?
这是我的代码。
//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 个编译器警告,指出协议中没有这些方法。它们是什么......但它编译运行并工作。
【问题讨论】:
在您创建它的类中,您可以将委托分配为实现协议的对象。检查iprav.in/?p=57 我做到了,但它将委托设置为自我。我不能委托给自我,因为我有 3 个视图并且希望视图 3 将数据传递给视图 1。如果我可以跳过它两次传递给 self 是没有意义的,这就是我所做的,但让控制器位于方法从堆栈中设置。 如果您有对 view1 或其控制器的引用,那么在您创建 view3 时将委托分配给该引用。 【参考方案1】:永远不要让实例将委托设置为自己。代表的整个想法是您不需要知道代表是谁。据我了解,您的架构分为三个层次;
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
通知。
【讨论】:
我会给你打勾。这是我想这样做的方式,但我认为它有点冗长。因此,当视图 2 推送视图 3 时,它会将委托设置到堆栈中索引:0 处的视图控制器。它真的很好用。我上面遇到的问题是另一个 xcode 问题,简单的重启就停止了编译器警告。以上是关于iPhone setDelegate 到先前分配的对象的主要内容,如果未能解决你的问题,请参考以下文章
这个方法叫啥:[NSPathStore2 setDelegate:]