NSURLC ошибка соединения - 1003 - PullRequest
2 голосов
/ 04 июля 2011

Я пытаюсь извлечь данные из определенного URL с помощью команды:

-(NSMutableData *) callUrl: (NSString *)url withData:(NSMutableDictionary *)data delegate:(id) delegate {

    NSURL *executeUrl = [NSURL URLWithString:<string>];
    NSURLRequest *request = [NSURLRequest requestWithURL: executeUrl
                             cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                             timeoutInterval:60];

    NSMutableData *receivedData = nil;

    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:request delegate:delegate];
    if (theConnection) {
        receivedData = [[NSMutableData data] retain];
    } else {
        @throw @"Connection error";
    }

    return receivedData;
}

В делегате (как после connectionDidFinish, так и connectionDidFailWithError) я делаю:

//some uninvasive alerts
// release the connection, and the data object
[connection release];
[receivedData release];

Проблема в том, что я предоставляю плохие данныеURL Я получил правильную ошибку - это хорошая часть - но затем я хочу выполнить второй URL - хорошо, конечно, у меня ошибка 1003 - NSURLErrorCannotFindHost.

Примерно через 1-2 минуты я успешно вызываю URLи получить данные.Я подозреваю, что некоторые таймауты и порты работают, но изменение тайм-аута в NSURLRequest ничего не меняет.

ОБНОВЛЕНИЕ

Как оказалось - у администраторов были некоторые проблемы с DNSсервер достиг через сеть WiFi.Код в порядке.Спасибо за ответ.Если у некоторых есть похожие проблемы: попробуйте IP-адрес вместо имени хоста.

Ответы [ 3 ]

1 голос
/ 21 февраля 2013

Из документации разработчика Apple iOS ошибка 1003 означает, что имя хоста для URL не может быть разрешено.Чтобы избежать сбоев DNS в Wi-Fi, перегруженных сценариях DNS, предпочтительно разрешить IP-адрес из имени хоста для последующего использования или напрямую задавать IP-адрес жестко, если вы не собираетесь позже переносить хостинг.

Документация Apple:

URL Loading System Error Codes

Эти значения возвращаются как свойство кода ошибки объекта NSError с доменом «NSURLErrorDomain».

enum
 { 
  NSURLErrorBadURL = -1000,
  NSURLErrorTimedOut = -1001,
  NSURLErrorUnsupportedURL = -1002,
  NSURLErrorCannotFindHost = -1003,//****
  NSURLErrorCannotConnectToHost = -1004,
  NSURLErrorDataLengthExceedsMaximum = -1103,
  NSURLErrorNetworkConnectionLost = -1005,
  NSURLErrorDNSLookupFailed = -1006,
  ...
  }

1003 NSURLErrorCannotFindHost
Returned when the host name for a URL cannot be resolved.
Available in iOS 2.0 and later.
Declared in NSURLError.h.
1 голос
/ 18 января 2015

Я сделал 2 вещи, чтобы решить эту проблему:

  1. Я использовал это до начала моего NSUrlConnection

    [NSURLConnection cancelPreviousPerformRequestsWithTarget:self];

  2. Я изменил свой DNS на 8.8.8.8 в настройках Wi-Fi, который является общедоступным DNS-сервером Google.

Не знаю, какой из них исправил, но проблема была решена.

0 голосов
/ 04 июля 2011

перед выполнением любого нового вызова соединения отмените предыдущее соединениеиспользуя

[self.connection cancel];
...