我正在使用URL后台会话将pdf上传为数据流,使用iOS版本> 9.0。我设置了300秒的超时时间间隔,但根本不起作用。10秒后就会出现超时错误。
以下是代码片段。
如果互联网正常工作,那就没问题,否则10秒后会出现错误。错误信息是Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSErrorFailingURLStringKey=http://test.mydomain.com/common.svc/json/FileUploadPDF, NSErrorFailingURLKey=http://test.mydomain.com/common.svc/json/FileUploadPDF, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2104, NSLocalizedDescription=The request timed out.}。
关于这个问题的更多细节:
我已经在ios 9.3模拟器中检查了我的代码,它等待连接出现,然后继续上传。我已经等待了4分钟,它可以正常工作。但是当我在ios 11.0.1上运行此代码时,10秒后就会超时。我需要额外做些什么才能解决呢?我也尝试过其他方法。
以下是代码片段。
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];
}
请求上传数据流。
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];
委托
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error {
if (error) {
// Handle error
NSLog(@"Error %@",error);
}
[session finishTasksAndInvalidate];
self.receivedData = nil;
}
如果互联网正常工作,那就没问题,否则10秒后会出现错误。错误信息是Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSErrorFailingURLStringKey=http://test.mydomain.com/common.svc/json/FileUploadPDF, NSErrorFailingURLKey=http://test.mydomain.com/common.svc/json/FileUploadPDF, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2104, NSLocalizedDescription=The request timed out.}。
关于这个问题的更多细节:
我已经在ios 9.3模拟器中检查了我的代码,它等待连接出现,然后继续上传。我已经等待了4分钟,它可以正常工作。但是当我在ios 11.0.1上运行此代码时,10秒后就会超时。我需要额外做些什么才能解决呢?我也尝试过其他方法。
if ([backgroundSession respondsToSelector:@selector(setWaitsForConnectivity:)]) {
[backgroundSession setWaitsForConnectivity:true];
}
但它没有任何效果。
您可以使用以下演示文件:
session.timeoutIntervalForRequest = 30.0; session.timeoutIntervalForResource = 60.0;
这样。 - Prashant Tukadiya