我有多个视图,它们可以制作相同的NSURLRequest/NSURLConnection request
。理想情况下,为了获得一些代码重用,我想有一些“代理”,它负责创建/执行(异步)请求/连接,设置所有委托方法等所有基础工作。 ,所以我不必在每个视图中复制所有这些NSURLConnection
委托方法处理程序。首先,这种设计方法是否合理?其次,我会如何去做这样的事情?NSURLConnection用于异步Web服务调用的NSURLRequest代理
对于一个小的背景信息,我试图得到它“工作”,但是,它似乎不是异步执行。我创建具有用于不同的web服务调用的实例方法(和也含有NSURLConnection
委托方法)一个Proxy.h /米文件:
@interface Proxy : NSObject {
NSMutableData *responseData;
id<WSResponseProtocol> delegate;
}
- (void)searchForSomethingAsync:(NSString *)searchString delegate:(id<WSResponseProtocol>)delegateObj;
@property (nonatomic, retain) NSMutableData *responseData;
@property (assign) id<WSResponseProtocol> delegate;
@end
的WSResponseProtocol被定义为这样:
@protocol WSResponseProtocol <NSObject>
@optional
- (void)responseData:(NSData *)data;
- (void)didFailWithError:(NSError *)error;
@end
为了使用它,视图控制器只需要符合WSResponseProtocol
协议就可以捕获响应。使Web服务调用如下所示:
Proxy *p = [[Proxy alloc] init];
[p searchForSomethingAsync:searchText delegate:self];
[p release];
我可以提供更多的代码,但其余的可以假设。在打电话之前,我“开始动画”一个UIActivityIndicatorView
微调器。但是这个微调者永远不会旋转。如果我直接将NSURLConnection委托方法直接放在视图控制器中,那么微调器就会旋转。所以,这让我认为我的实现不是异步执行的。这里有什么想法/想法?
啊 - 非常好!我明白你的意思 - 你的解决方案将消除对协议的需求。更直截了当!感谢那!我认为,尽管我开始热衷于Kendal提出的解决方案,也就是说,将同步的NSURLConnections包装在NSOperation中并引发队列。该解决方案可能是创建异步Web服务调用框架问题的更直接的解决方案,尽管我的方法+您的洞察力仍然可行。 – tbehunin 2009-12-29 18:10:33
恢复我的评论早些时候。这种方法是我在NSOperation中使用vs同步NSURLConnections的方法。 NSURLConnection已经提供了我所需要的线程,而不需要把它放到NSOperation中。另外,阅读更多博客之后,同步NSURLConnections +身份验证不会提供与异步调用一样多的“钩子”。 – tbehunin 2010-01-01 17:23:12
何处\如何receivedData数据声明。该文件只是说它在其他地方声明,但没有提供如何做到这一点的信息。 – 2012-10-03 17:17:09