我正在使用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];
答案 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;
}