2014-09-11 2 views
42

Я пытаюсь сделать простой запрос GET с использованием NSURLConnection в XCode 6 (Beta7 2) на SDK IOS 8, который не работает с «Code 1005», сетью соединение было потеряно ». Сбой вызова при попытке получить http://www.google.com или несколько других образцов страниц из Интернета, но выполняется, если я делаю запрос на простой HTTP-сервер на localhost (python -m SimpleHTTPServer). Я также пробовал использовать библиотеку AFNetworking (2.4.1) - URL-адреса, которые не с NSURLConnection также не работают с библиотекой.NSURLConnection Запрос GET возвращает -1005, «сетевое соединение было потеряно»

Вот мой код -

NSString * url = @"http://0.0.0.0:8000"; 
// NSString * url = @"http://www.google.com"; 

NSLog(@"URL : %@", url); 

// Mutable is probably not required, but just in case it REALLY WANTS me to set HTTP method 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; 
[theRequest setHTTPMethod:@"GET"]; 

NSURLResponse *urlResponse = nil; 
NSError *error = nil; 

NSData * data = [NSURLConnection sendSynchronousRequest:theRequest 
             returningResponse:&urlResponse 
           error:&error]; 

if (error == nil) { 
    NSString *response = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
    NSLog(response); 
} else { 
    NSString *response = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
    NSLog(@"%@", [error userInfo]); 
} 

Журналы:

2014-09-11 17:34:23.950 SearchExample[5092:2074687] URL : http://www.google.com 
2014-09-11 17:34:24.023 SearchExample[5092:2074687] { 
    NSErrorFailingURLKey = "http://www.google.com"; 
    NSErrorFailingURLStringKey = "http://www.google.com"; 
    NSLocalizedDescription = "The network connection was lost."; 
    NSUnderlyingError = "Error Domain=kCFErrorDomainCFNetwork Code=-1005 \"The network connection was lost.\" UserInfo=0x7fc8515640a0 {NSErrorFailingURLStringKey=http://www.google.com/, NSErrorFailingURLKey=http://www.google.com/, _kCFStreamErrorCodeKey=57, _kCFStreamErrorDomainKey=1, NSLocalizedDescription=The network connection was lost.}"; 
    "_kCFStreamErrorCodeKey" = 57; 
    "_kCFStreamErrorDomainKey" = 1; 
} 
2014-09-11 17:34:24.023 SearchExample[5092:2074687] URLResponse: (null) 
+0

kCFStreamErrorDomainKey 1 является областью POSIX, что означает, что kCFStreamErrorCodeKey 57 "сокет не подключен". Является ли брандмауэр на вашем Mac, не позволяя Xcode/simulator выполнять внешние подключения? – quellish

+0

@quellish Брандмауэр отключен на моем Mac. – Vikesh

+2

Возможный дубликат [Error Domain = NSURLErrorDomain Code = -1005 "Сетевое соединение было потеряно."] (Http://stackoverflow.com/questions/25372318/error-domain-nsurlerrordomain-code-1005-the-network-connection -was-lost) – Vikesh

ответ

92

Я видел подключение к Интернету неудачу на тренажере iPhone 6 в последнее время, в результате чего в одних и тех же ошибок. У моего Mac было рабочее интернет-соединение, которое симулятор не сделал. Исправлена ​​проблема с перезагрузкой симулятора.

+5

Это, по сути, правильный ответ! Я перезапустил XCode, но почему-то не думал перезапустить симулятор. Да, он работает после перезапуска симулятора! Спасибо! – Vikesh

+2

Очень странно, но это сработало! –

+1

Это случилось со мной, когда я использовал Simulator во время беспроводной связи, а затем переключился на проводное соединение. Я даже пытался отключить беспроводную связь. –

2

Я пробовал все предлагаемое по крайней мере 15 ответов от Google, но ни один из них не решил мою проблему, пока я не попробовал следующее, которое полностью касалось моей проблемы. Похоже, что соединения Wi-Fi могут стать поврежденными на Mac, поэтому, если вы удалите определенное соединение, которое используете, а затем снова подключитесь (выбирая сеть и снова вводите свой пароль), тогда это исправит проблему и не станет более страшным -1005 «Сетевое соединение было потеряно».

  • Перейти к символу Wi-Fi на вашем Mac линейке и "Turn Wi-Fi Off"
  • Затем выберите "Open Network Preferences" (в том же меню, в нижней части).
  • В правом нижнем углу панели «Сеть» выберите «Дополнительно».
  • Выберите сетевое соединение, к которому вы были ранее подключены.
  • Нажмите минус-символ прямо под этой таблицей, чтобы удалить это соединение.
  • Нажмите «ОК» для этого окна.
  • Нажмите «Применить» в окне «Сеть».
  • Вернитесь к символу Wi-Fi на панели меню и снова включите Wi-Fi.
  • Подождите, пока появится сетевое подключение, а затем выберите его (и он снова попросит пароль, потому что вы удалили информацию о подключении).
  • Теперь он запомнит это недавно обновленное соединение, которое должно решить проблему!
0

Я заметил, что эта проблема возникает, когда вы продолжаете активный симулятор, и ваш макинтош длится спать (скажем от 5 до 10 часов). Тогда все внезапно запустить приложение на тренажере он показывает, как войти

NSURLConnection GET request returns Code=-1005 "The network connection was lost." 

Решение заключается в просто бросить симулятор, чистый проект и повторного запуска проекта. Это сработало для меня!

8

Я получал эту ошибку последовательно на iOS 9 с определенными сетевыми вызовами. Двое работали нормально, а еще двое не были.

Оказалось, что это вызвано некоторыми неправильными параметрами, которые я передавал с телом запроса ... Я бы не ожидал, что это вызовет ошибку -1005 ... но это произошло .. Избавиться от ненужного параметры сделали все это!

+0

Что, где эти ненужные параметры в вашем коде? Я столкнулся с подобной проблемой. – Tukkan

+0

Боюсь, я даже не могу вспомнить, какое приложение я работал тогда ... Но если вы примените только необходимые настройки и параметры к своему запросу, это может помочь. Не устанавливайте тип содержимого, если вы не отправляете httpBody, например – CMash

1

Попробуйте изменить сериализацию запроса в AFNetworking http или json. в моем случае это был json, затем я установил http. Теперь это работает.

0

У меня был аналогичный выпуск и повторный запуск симулятора. В моем случае я мог ударить по веб-сервису в качестве альтернативы, так как в нечетное время это было бы успешным, и даже за это время он бросил меня с этой ошибкой. Я знаю, что это странно, но так было. Решаемый его следующий подход в стриже:

let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration() 
       urlconfig.timeoutIntervalForRequest = 1 
       urlconfig.timeoutIntervalForResource = 1 
       let session = NSURLSession(configuration: urlconfig) 

       let task = session.dataTaskWithRequest(request){(data,response,error) in 
    //Processing 
    } 
task.resume() 
0

Простого & раствор образец, испытаны много раз, работая идеально.

// Проверьте ответную ошибку, используя код состояния, а если вы получите -1005, то снова вызовите это api.

   if let strErrorReasonCode : Int = response.response?.statusCode { 
          if authentication_Errors_Range.contains(Alamofire_Error) { 
           self.POST(urlString, paramaters: paramaters, showLoader: showLoader, success: { (responseObject) in 
            if response.result.isSuccess { 
             if let value = response.result.value { 
              let dictResponce = self.isValidated(value as AnyObject) 
              if dictResponce.0 == true { 
               success(dictResponce.1) 
              } 
              else { 
               failure(dictResponce.1) 
              } 
             } 
            } 
           }, failure: {_ in 
            failure(jsonResponce) 
           }) 
          } 
       }