我有一个应用程序,可以在Xcode6-Beta1和Xcode6-Beta2与iOS7和iOS8上正常工作。但是对于Xcode6-Beta3, Beta4, Beta5,我在iOS8上面临网络问题,但在iOS7上一切都很好。我得到错误“网络连接丢失”。错误如下:

Error: ErrorDomain =NSURLErrorDomain Code=-1005 "The network connection was lost."UserInfo=0x7ba8e5b0 {NSErrorFailingURLStringKey=, _kCFStreamErrorCodeKey=57, NSErrorFailingURLKey=, NSLocalizedDescription=网络连接丢失。, _kCFStreamErrorDomainKey=1, NSUnderlyingError=0x7a6957e0 "The network connection was lost."}

我使用AFNetworking 2。X和下面的代码片段进行网络调用:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:<example-url>
   parameters:<parameteres>
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
          NSLog(@“Success: %@", responseObject);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          NSLog(@"Error: %@", error);
      }];

我尝试了NSURLSession,但仍然收到相同的错误。


当前回答

我也有同样的问题。我不知道AFNetworking如何实现https请求,但对我来说,原因是NSURLSession的缓存问题。

在我的应用程序从safari跟踪回来后,然后发布一个http请求,“http加载失败1005”错误将出现。 如果我停止使用“[NSURLSession sharedSession]”,而是使用一个可配置的NSURLSession实例调用“dataTaskWithRequest:”方法如下,问题就解决了。

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
config.URLCache = nil;
self.session = [NSURLSession sessionWithConfiguration:config];

只要记住设置配置。URLCache = nil;。

其他回答

重新启动模拟器解决了我的问题。

在iOS 8模拟器上运行时,beta 5和AFNetworking 1.3也有一个问题,导致连接错误:

Domain=NSURLErrorDomain Code=-1005 "The network connection was lost."

同样的代码在iOS 7和7.1模拟器上工作得很好,我的调试代理显示失败发生在连接实际尝试之前(即没有记录请求)。

我已经追踪到NSURLConnection的失败,并向苹果报告了这个错误。见附图第5行:

.

更改为使用https允许从iOS 8模拟器连接,尽管会出现间歇性错误。

问题仍然存在于Xcode 6.01 (gm)。

我必须退出XCode,删除DerivedData文件夹内容(~/Library/Developer/ XCode /DerivedData或/Library/Developer/ XCode /DerivedData)并退出模拟器才能使其工作。

我通过VPN连接。去使能VPN解决了问题。

参见pjebs 1月5日在Github上的评论。

Method1:

if (error.code == -1005)
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        dispatch_group_t downloadGroup = dispatch_group_create();
        dispatch_group_enter(downloadGroup);
        dispatch_group_wait(downloadGroup, dispatch_time(DISPATCH_TIME_NOW, 5000000000)); // Wait 5 seconds before trying again.
        dispatch_group_leave(downloadGroup);
        dispatch_async(dispatch_get_main_queue(), ^{
            //Main Queue stuff here
            [self redoRequest]; //Redo the function that made the Request.
        });
    });

    return;
}

也有人建议重新连接该网站,

即触发POST请求两次

解决方法:使用一个方法做连接到站点,返回(id),如果网络连接丢失,返回使用相同的方法。

方法2

-(id) connectionSitePost:(NSString *) postSender Url:(NSString *) URL {
     // here set NSMutableURLRequest =>  Request

    NSHTTPURLResponse *UrlResponse = nil;
    NSData *ResponseData = [[NSData alloc] init];

    ResponseData = [NSURLConnection sendSynchronousRequest:Request returningResponse:&UrlResponse error:&ErrorReturn];

     if ([UrlResponse statusCode] != 200) {

          if ([UrlResponse statusCode] == 0) {

                  /**** here re-use method ****/
                  return [self connectionSitePost: postSender Url: URL];
          }

     } else {
          return ResponseData;
     }

}