转:IPhone之ASIFormDataRequest POST操作架构设计/ 处理网络超时问题

//开启iphone网络开关
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
 
ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:[NSURLURLWithString:host]];
//超时时间
 
request.timeOutSeconds = 30;
 
//定义异步方法
 
[request setDelegate:self];
[request setDidFailSelector:@selector(requestDidFailed:)];
[request setDidFinishSelector:@selector(requestDidSuccess:)];

 
//用户自定义数据   字典类型  (可选)
request.userInfo = [NSDictionary dictionaryWithObject:method forKey:@"Method"];
//post的数据
 
[request appendPostData:[body dataUsingEncoding:NSUTF8StringEncoding]];
 

//开始执行
 
[request startAsynchronous];



//执行成功
 
- (void)requestDidSuccess:(ASIFormDataRequest *)request
{
//获取头文件
NSDictionary *headers = [request responseHeaders];
 
//获取http协议执行代码
NSLog(@"Code:%d",[request responseStatusCode]);
 
if ([delegaterespondsToSelector:@selector(OARequestSuccessed:withResponse:WithData:withHeaders:)])
{
//执行委托操作  (架构设计   自选)
[delegate OARequestSuccessed:method withResponse:[request responseString] WithData:[request responseData] withHeaders:headers];
 
}

//清空
if (request)
{
[request release];
}
 
//关闭网络
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
 

//执行失败
 
- (void)requestDidFailed:(ASIFormDataRequest *)request{
//获取的用户自定义内容
NSString *method = [request.userInfo objectForKey:@"Method"];
//获取错误数据
NSError *error = [request error];
 
if ([delegate respondsToSelector:@selector(OARequestFailed:withError:)]) 
{
//执行委托 将错误数据传其他方式(架构设计   自选)
[delegate OARequestFailed:method withError:error];
}
 
if (request) 
{
[request release];
}
 
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

//执行成功函数
 
- (void)OARequestSuccessed:(NSString *)method withResponse:(NSString *)response WithData:(NSData *)data withHeaders:(NSDictionary *)headers
{

NSString *responseStr = [[[NSString alloc] initWithData:dataencoding:NSUTF8StringEncoding] autorelease];
//服务返回post后的数据
NSLog(@"response:\n%@",responseStr);
}

//执行失败函数
 
- (void)OARequestFailed:(NSString *)method withError:(NSError *)error
{

NSLog(@"Error:%@",error);

 
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"出错了" message:@"网络连接失败, 请稍后重试." delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil];
[alert show];
[alert release];
}

我自己的方案:

// 本类的公共方法 用于通过指定的URL获取数据。
+(NSString *)getStringbyHTTPURL:(NSString *)url
{
selector:@selector(showWaitAlert) userInfo:nil repeats:NO];    //停几秒再执行
    if ([NetWork isWorking]) {
        NSString *encodedURL = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        ASIFormDataRequest *asiHttpRequest = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:encodedURL]];
       
        asiHttpRequest.timeOutSeconds = 30;       //设置网络延迟时间
        [asiHttpRequest setDelegate:self];
        
        NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF8);
        
        NSLog(@"url====%@",url);
        NSLog(@"encodedURL====%@",encodedURL);
        
        [asiHttpRequest setStringEncoding:enc];
        [asiHttpRequest startSynchronous];
        NSError *erro = [asiHttpRequest error];
        if (erro) {             //没有错误信息时,返回的是null
            UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"获取数据失败,请稍后重试!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];
            [alertView show];
            [alertView release];
            return nil;
        }else{
            NSString *strResult = [asiHttpRequest responseString];
            return strResult;
        }
 
    }else {
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"无法连接到网络,请稍后重试!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];
        [alertView show];
        [alertView release];
        return nil;
    }
 }
原文地址:https://www.cnblogs.com/ygm900/p/3110621.html