我正在使用 NSURLSessionDataTask
和 NSMutableURLRequest
。我注意到 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/