objective-c - NSMutableURLRequest setTimeoutInterval 在 ios 11.0 中不起作用

标签 objective-c nsurlsession ios11 nsurlsessiondatatask

我正在使用 URL 后台 session 将 pdf 作为数据流上传,使用 ios 版本 > 9.0。我将超时间隔设置为 300 秒。它根本不起作用。 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 Error Domain=NSURLErrorDomain Code=-1001 “请求超时。” UserInfo={NSErrorFailingURLStringKey=http://test.mydomain.com/common.svc/json/FileUploadPDF , NSErrorFailingURLKey= http://test.mydomain.com/common.svc/json/FileUploadPDF , _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2104, NSLocalizedDescription=请求超时。

有关此问题的更多详细信息,

因为我已经在 ios 9.3 模拟器 中检查了我的代码,它等待连接出现。然后继续上传。我已经检查了 4 分钟,等待它工作。但是当我将此代码运行到 ios 11.0.1 时,它会在 10 秒后超时。我需要做些什么才能实现它。我也试过了

if ([backgroundSession respondsToSelector:@selector(setWaitsForConnectivity:)]) {
    [backgroundSession setWaitsForConnectivity:true];
}

但是没有效果。


您可以使用下面的演示文件:-

ViewController.h & .m

最佳答案

@Warewolf 我已经下载了你的 .m 文件并集成到我的演示项目中。

似乎在 Xcode 9.1 和 iOS 11.1 中都能正常工作

我能在几秒钟内得到回应..

下面是您的代码的输出..

response of background session --- {
    RestResponse =     {
        messages =         (
            "Total [249] records found."
        );
        result =         (
                        {
                "alpha2_code" = AF;
                "alpha3_code" = AFG;
                name = Afghanistan;
            },
                        {
                "alpha2_code" = AX;
                "alpha3_code" = ALA;
                name = "\Ufffd\Ufffdland Islands";
            },
                        {
                "alpha2_code" = AL;
                "alpha3_code" = ALB;
                name = Albania;
            },.....

关于objective-c - NSMutableURLRequest setTimeoutInterval 在 ios 11.0 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47450307/

相关文章:

ios - 在带有 iOS 11 的 xcode 9 中-首次运行时加载 map 图 block 的问题

annotations - MKAnnotationView 未在 iOS 11 中显示

ios - CGRect 大小和点返回 0

ios - 使用 NSURLSessionDataTask 显示文件下载进度

ios - 在 iOS 11 中旋转回纵向后,导航栏中的后退按钮向下移动

ios - NSURLSession 是否持续存在?

macos - iOS : how to debug kSecTrustResultRecoverableTrustFailure

objective-c - 覆盖在 MPMoviePlauerViewController 之上的问题

iphone - 在iPhone项目中为sqlite实现Haversine功能

objective-c - Fabric macOS 异常有时没有被捕获?