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

标签 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];

最佳答案

dataTaskWithRequest:completionHandler: 有一个错误参数。如果发生超时,您将获得一个传递给完成 block 的非零错误对象,您应该以适合您的应用程序的方式处理它。对于可能发生的其他类型的错误,您无论如何都需要处理它。关于此方法的文档非常少,但我认为如果下载失败(由于任何原因,包括超时),您将得到一个 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;
     }

关于ios - 我们是否需要使用 NSURLSessionDataTask 和 NSMutableURLRequest 处理进程的连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24679557/

相关文章:

javascript - iOS UIWebView 应用程序在 Safari 中打开链接

ios - Swift - UIControl addTarget 不起作用

ios - iOS 应用程序需要 OnDemand VPN,随机断开连接

ios - 什么时候使用 NSURLSessionDownloadTask 和 NSURLSessionDataTask?

ios - NSMutableURLRequest 将数据发布到 URL

IOS:在带有动画的 ImageView 下禁用 ScrollView

ios - 在 xcode 中将不同的图像添加到不同的注释 View

ios - 如何从完成的 `NSURLSessionDataTask` 获取数据?

cookies - WKWebView 中丢失 cookie

iphone - 向 NSMutableURLRequest 添加字段