我们是否需要使用NSURLSessionDataTask和NSMutableURLRequest来处理进程的连接超时

时间:2014-07-10 14:43:55

标签: ios nsurlsession nsmutableurlrequest

我正在使用NSURLSessionDataTaskNSMutableURLRequest。我注意到NSMutableURLRequest有一个超时(我认为240秒,这是一个很长的时间)。我还读到NSURLSession也有超时但我不确定它究竟是什么。我的问题是,如果发生超时,如果我没有处理超时,应用程序是否会崩溃?是否有必要处理超时或操作系统处理它并防止应用程序崩溃,并且只是杀死请求。如果我们必须处理它,那么就我的代码示例得到一些反馈会很棒;

     NSURLSession * session = [NSURLSession sharedSession];
     NSURL * url = [[NSURL alloc] initWithString:self.url];
     NSMutableURLRequest * request = [[NSMutableURLRequest alloc] initWithURL:url];
     [request setHTTPMethod:@"POST"];
     [request addValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
     NSString * params =[NSString stringWithFormat:@"email=%@",some email];
     [request setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];


     NSURLSessionDataTask * task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

     NSHTTPURLResponse * httpResp = (NSHTTPURLResponse *)response;

     NSDictionary * dataDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

    //some code missing

}

[task resume];

1 个答案:

答案 0 :(得分:2)

dataTaskWithRequest:completionHandler:有一个错误参数。如果发生超时,您将获得一个传递给完成块的非零错误对象,您应该处理它,但是适合您的应用程序。无论如何,您都需要处理可能发生的其他类型的错误。关于此方法的文档非常稀疏,但我认为如果下载失败(由于任何原因包括超时),您将获得一个nil数据对象,因此您应该在尝试对数据执行任何操作之前检查它。

NSURLSessionDataTask * task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

     NSHTTPURLResponse * httpResp = (NSHTTPURLResponse *)response;
     if (data) {
         NSDictionary * dataDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
     }else{
         NSLog (@"%@", error);
         // do whatever to handle the error;
     }