仅在移动网络上获取错误域= NSURLErrorDomain代码= -1005

时间:2017-06-16 20:02:29

标签: ios nsurlsession nserror nsurlerrordomain xcode8

我在iOS 10.3.2上使用Xcode 8.3.2构建了一个应用程序。我使用NSURLSession来实现web服务。我正在使用以下代码来执行此操作。

NSMutableURLRequest *request=[[NSMutableURLRequest alloc]initWithURL:Url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:180.0] ;

NSMutableDictionary *dict=[[NSMutableDictionary alloc]init];
[dict setObject:lati forKey:@"latitude"];
[dict setObject:longi forKey:@"longitude"];

NSError *errJsonToData = nil;
NSData *requestPostData=[NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&errJsonToData] ; 

[request setHTTPMethod:@"POST"] ;
[request setValue:[NSString stringWithFormat:@"%lu",(unsigned long)[requestPostData length]] ;forHTTPHeaderField:@"Content-Length"] ;
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestPostData] ;


NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfiguration delegate:nil delegateQueue:[NSOperationQueue mainQueue]];

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable connectionError) {
    if(connectionError)
    {
      NSLog(@"Error Description: %@",[connectionError localizedDescription]);
    } else { //do anything}
}];
[dataTask resume];

现在我的webservices网址是http连接。为此,我还在 Info.plist 中添加了 App Transport Security 。但问题是这个代码在连接到wifi时工作正常,但在连接到移动网络(即3G,LTE)时会引发错误有时。我收到错误“网络连接丢失了”。错误如下:

  

错误:错误域= NSURLErrorDomain代码= -1005“网络   连接丢失了。“UserInfo = 0x7ba8e5b0   {NSErrorFailingURLStringKey =,_ kCFStreamErrorCodeKey = 57,   NSErrorFailingURLKey =,NSLocalizedDescription =网络连接   丢失。,_ kCFStreamErrorDomainKey = 1,NSUnderlyingError = 0x7a6957e0   “网络连接丢失了。”}

如果是典型的服务器错误那么为什么它只发生在移动网络上?

1 个答案:

答案 0 :(得分:0)

根据您使用的服务器,问题可能是服务器上的“KeepAlive”设置(通常是由于服务器的流量高于预期)。尝试捕获该特定错误代码,然后重新尝试完全相同的URL请求。希望它能正常工作,但如果它第二次出现同样的错误,那么还有一个更大的问题需要解决。

您还可以尝试查看服务器上的KeepAlive设置,并禁用该功能或​​调整设置,但我建议首先尝试使用其他选项来缩小某些可能的问题。

祝你好运!