Когда initWithRequest NSURLConnection возвращает ноль - PullRequest
18 голосов
/ 20 октября 2010

Кто-нибудь знает, в каких ситуациях инициализация NSURLConnection возвращает ноль вместо созданного соединения.В документации говорится, что это возможно, но не указывается, когда это происходит.

Рассматриваемый метод / сообщение:

[[NSURLConnection alloc] initWithRequest:request delegate:self];

-

Согласно* Ссылка на класс NSURLConnection:

Возвращаемое значение: URL-соединение для запроса URL.Возвращает nil, если соединение не может быть инициализировано.

Руководство по программированию системы загрузки URL-адресов говорит следующее:

Если NSURLConnection не может создать соединение для запроса, initWithRequest: делегат: возвращает ноль.

-

Хотя возможно, что этот метод возвращает ноль, я не могу придумать сценарий, который вызывает это.Я пробовал следующие сценарии:

  • URLRequest с пустым URL: connection:didFailWithError: метод делегата вызывается с "неподдерживаемым URL" в качестве ошибки.
  • URLRequest сневерный URL: connection:didFailWithError: метод делегата вызывается с «неверным URL» в качестве ошибки.
  • URLRequest с несуществующим URL: connection:didFailWithError: метод делегата вызывается с «Не удалось найти сервер с указанным именем хоста»«.как ошибка.
  • Допустимый запрос, но нет интернета: connection:didFailWithError: Метод делегата вызывается с "Интернет-соединение, похоже, отключено".как ошибка.
  • nil request: вызывает сбой.

Метод initWithRequest вернул допустимое значение NSURLConnection в каждом сценарии (кроме последнего) и вызвал connection:didFailWithError: с соответствующей ошибкой.

Кто-нибудь смог выяснить, по какому сценарию возвращается nil?

Ответы [ 5 ]

1 голос
/ 28 октября 2010

Я думаю, что ответ "Никогда".Кажется, единственный способ для NSURLConnection вернуть nil не удается в [super init].([super init] возвращает nil) Но поскольку суперкласс NSURLConnection - это NSObject, а NSObjects init просто возвращает self (никогда не nil)

PS: это для IOS SDK 4.0, на эмуляторе, может отличаться на устройстве.

1 голос
/ 25 октября 2010

Я полагаю, что это также можно использовать, когда не удается загрузить , а не просто инициализировать .( alloc делается отдельно - вот где, вероятно, вас укусит низкая память) Так что (я полагаю) он может потерпеть неудачу, потому что у вас нет доступной сети (3G / Wifi), или просто не удалосьподключиться к серверу.В любом случае используйте:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

Чтобы получить фактический сбой.

Вы можете смоделировать это при отсутствии сети - или даже датьэто плохой URL.

0 голосов
/ 29 июля 2015

NSURLConnection возвращает nil, если оно не создано внутри runLoop.

0 голосов
/ 26 октября 2010

Я думаю, это вызвано тем, что указанный вами запрос имеет неправильные или не все необходимые значения

0 голосов
/ 20 октября 2010

Я бы попробовал все вышеперечисленное, кроме как сделать это при нехватке памяти.IE, я думаю, что это произойдет, когда внутренний malloc не сработает.

...