I am using a background URL session to download a PDF as a data stream using ios version> 9.0. I set the timeout interval to 300 seconds. This does not work at all. After 10 seconds, he receives a timeout error.
Below is a snippet of code
NSTimeInterval reqTimeInterval = 300.0f; - (NSURLSession *)uploadSessionForMrNo:(NSString *)mrNo userRoleId:(NSString *)userRoleId timestamp:(NSString *)timestamp { NSOperationQueue *queue = [[NSOperationQueue alloc] init]; queue.maxConcurrentOperationCount = 4; NSString *backgroundSessionIdentifier = [NSString stringWithFormat:@"backgroundPdfUploadIdentifier_%@",mrNo]; NSURLSessionConfiguration *backgroundSession = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:backgroundSessionIdentifier]; backgroundSession.discretionary = true; NSURLSession *session = [NSURLSession sessionWithConfiguration:backgroundSession delegate:self delegateQueue:queue]; [session setAccessibilityLabel:mrNo]; [session setAccessibilityValue:userRoleId]; [session setAccessibilityHint:timestamp]; return session; } - (void)uploadPdfRequest:(NSURLRequest *)request forMrNo:(NSString *)mrNo userRoleId:(NSString *)userRoleId andTimestamp:(NSString *)timestamp { NSURLSession *session = [self uploadSessionForMrNo:mrNo userRoleId:userRoleId timestamp:timestamp]; NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request]; NSLog(@"postDataTask %@ timeout %f",postDataTask,request.timeoutInterval); [postDataTask resume]; }
Request to load data stream.
NSMutableURLRequest *request = [[NSURLRequest requestForPDFStringUpload:uploadQueue.uploadData] mutableCopy]; [request setValue:[DataExchange authToken] forHTTPHeaderField:FBENCRYPT_TOKEN_KEY]; [request setCachePolicy:NSURLRequestUseProtocolCachePolicy]; [request setTimeoutInterval:reqTimeInterval]; [self uploadPdfRequest:request forMrNo:uploadQueue.mrNo userRoleId:uploadQueue.userRoleId andTimestamp:uploadQueue.timestamp];
delegate
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { if (error) {
If the Internet works fine, then its fine otherwise. After 10 seconds I get
Error Domain Error = NSURLErrorDomain Code = -1001 "Request timed out." UserInfo = {NSErrorFailingURLStringKey = http://test.mydomain.com/common.svc/json/FileUploadPDF , NSErrorFailingURLKey = http://test.mydomain.com/common.svc/json/FileUploadPDF , _kCFStreamErrorEomrorKomrkomkreamkomkrkmekreamkr 2104, NSLocalizedDescription = Request timeout.}
Learn more about this issue.
As I checked my code in the ios 9.3 simulator, it is waiting for a connection. Then the download continues. I tested it for 4 minutes of waiting for its work. But when I run this code before ios 11.0.1 , it gets a timeout after 10 seconds. What do I need to do to achieve this. I also tried
if ([backgroundSession respondsToSelector:@selector(setWaitsForConnectivity:)]) { [backgroundSession setWaitsForConnectivity:true]; }
but it does not affect.
You can use the demo file below: -
ViewController.h and .m
objective-c ios11 nsurlsession nsurlsessiondatatask
Warewolf
source share