因此,我对代理人的工作,为什么使用它,如何实现等有了一个体面的想法,并且正在努力在我的一个项目中实现它。我试图解决的问题是从我的网络访问类解耦我的控制器对象。在这种情况下,这些想法在我的脑海中变得杂乱无章。委托人在目标中查询 - C
我以某种方式直观地感觉到NetworkAccessClass应该是Controller对象的委托,因为NetworkAccessClass充当Controller对象的帮助器。但似乎在相反的方式工作,因为以下显然是做了正确的方式:
NetworkaccessClass.h
@protocol NetworkAccessDelegate
-(void) requestSucceded:(NSData *) data
-(void) requestFailed:(int) responseCode;
@end
@interface NetworkAccessClass : NSObject
{
id<NetworkAccessDelegate> networkDelegate;
}
@property(nonatomic, assign) id networkDelegate;
-(void) initWithDelegate:(id) delegate; //
@end
NetworkAccessClass.m
@implementation
@synthesize networkDelegate
-(void) initWithParams:(id) delegate
{
networkDelegate = delegate;
// Assign GET/POST vals, create request etc
[request startAsynchronous];
}
-(void) requestSucceded:(ASIHTTPRequest *) request
{
if([networkDelegate respondsToSelector:@selector(requestSucceded:)]) {
// Send the data to the controller object for it to use
...
}
}
-(void) requestFailed:(ASIHTTPRequest *) request
{
// Same as above. Send to request failed.
}
@end
我
FirstViewController.h
最后
#import "NetworkAccessClass.h"
@interface FirstViewController<NetworkAccessDelegate>
{
}
-(void) requestSucceded:(NSData *) data;
-(void) requestFailed:(int) responseCode;
@end
和一样等等。
虽然这从我的网络类脱钩我的控制器,我不禁觉得这是错误因为在这种情况下,控制器作为委托或辅助方法到网络类,而不是倒过来。我缺少一些基本的东西吗?或者这是怎么回事?
谢谢,
Teja。
嗯我得到的理论,但委托,如果你只是把它看作一个英语单词,只是分配一个任务给某人/事物,有点像助手方法,这会导致混淆。虽然你提供的比喻有帮助。 – 2011-02-24 20:29:02
好吧,就像在这个例子中一样,让进程的结果在本地处理到感兴趣的地方,这样核心“做这件事的东西”就不必知道UIView中的哪个位置把数据。委托模式允许完全解耦。这个过程能够“将”结果的处理“委托”(动词)到接近那些结果想要使用的对象。 – 2011-02-24 20:42:35