我有多个相同的视图NSURLRequest/NSURLConnection request
。理想情况下,为了获得一些代码重用,我想要某种“代理”来完成创建/执行(异步)请求/连接、设置所有委托方法等的所有底层工作。 ,所以我不必NSURLConnection
在每个视图中复制所有这些委托方法处理程序。首先,这种设计方式合理吗?其次,我将如何去做这样的事情?
对于一些背景信息,我尝试了这个并让它“工作”,但是,它似乎并没有异步执行。我创建了一个 Proxy.h/m 文件,其中包含用于不同 Web 服务调用的实例方法(并且还包含NSURLConnection
委托方法):
@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 委托方法直接放在视图控制器中,那么微调器就会旋转。所以,这让我觉得我的实现不是异步执行的。这里有什么想法/想法吗?