我正在使用ASIHTTPRequest与服务器异步通信。它工作得很好,但我在不同的控制器中执行请求,现在重复的方法在所有这些控制器中。在单个类中抽象代码(请求)的最佳方式是什么,因此我可以轻松地重新使用代码,这样我就可以使控制器更简单。我可以把它放在单身人士(或在应用程序委托),但我不认为这是一个好方法。或者可以使用委托回调为其创建自己的协议。ASIHTTPRequest代码设计
一个良好的设计方法,任何意见将是有益的。谢谢。
我正在使用ASIHTTPRequest与服务器异步通信。它工作得很好,但我在不同的控制器中执行请求,现在重复的方法在所有这些控制器中。在单个类中抽象代码(请求)的最佳方式是什么,因此我可以轻松地重新使用代码,这样我就可以使控制器更简单。我可以把它放在单身人士(或在应用程序委托),但我不认为这是一个好方法。或者可以使用委托回调为其创建自己的协议。ASIHTTPRequest代码设计
一个良好的设计方法,任何意见将是有益的。谢谢。
我使用的奔科普塞的ASIHTTPRequest
非常沉重的Web服务客户端,我希望在接下来的几个星期才能完成的子类。这是一个伟大的项目,他的工作为我节省了大量的时间和精力。
我有一个ASINetworkQueue
在应用程序委托成立。队列发送-go
消息,以便它可以接收请求。我将我的子类请求添加到此队列中。每个请求都会被处理并发布其通知,并且我的视图控制器会相应地处理响应数据。
我所做的是子类ASIHTTPRequest
和:
-init
方法(或-initWithParams:
方法,根据请求)-requestFailed:
和-requestCompleted:
处理来自回来HTTP错误信息web服务-requestCompleted:
方法中的错误处理的NSNotification
通知作为视图控制器被推上并弹出导航堆栈,我添加和删除不同的注册。一些视图控制器只需要侦听特定的子类请求类型。
收听NSNotification
允许我发出UIAlertView
对话框,让用户知道出了什么问题,或者在请求产生成功的HTTP错误时处理请求响应数据(例如将结果馈送到Core Data存储区)。
请求是否成功或失败,我记得-release
请求时,我用它做。
我写了一个单独的类来处理这个问题。
static TCHttpRequest *_sharedHttpRequest = nil;
+ (id)sharedRequest
{
@synchronized(self){
if (_sharedHttpRequest == nil) {
_sharedHttpRequest = [[self alloc] init];
}
}
return _sharedHttpRequest;
}
- (NSDictionary *)loginWithUserName:(NSString *)user password:(NSString *)pwd
{
NSURL *url = [NSURL URLWithString:@"/login" relativeToURL:_url];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setCachePolicy:ASICacheForSessionDurationCacheStoragePolicy];
[request setTimeOutSeconds:HTTP_REQ_TIMEOUT];
[request addPostValue:user forKey:@"username"];
[request addPostValue:pwd forKey:@"password"];
request.delegate = self.delegate;
[_common_queue addOperation:request];
}
我看不出类方法和实例方法是如何相关的?类方法实例化TCHttpRequest并保证只有一个实例。 loginWithUserName实例方法实例化一个ASIFormDataRequest并将其添加到通用队列。我在这里看不到任何重用?
您是否必须处理服务器端的访问令牌?在我的情况下,我必须发出3-4个请求,我不确定他们是否会成功或失败。如果它们失败了,我将不得不要求一个新的访问令牌,然后重新运行失败的请求。另外我失败了,没有理由去运行其他人,直到我得到新的令牌。如果可用,只需重新运行等待队列中的那些。 – Zsolt