Подтвердить что ты не робот

Когда NSURLConnection initWithRequest возвращает ноль

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

Этот метод/сообщение:

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

-

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

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

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

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

-

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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