Когда 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?
Ответы
Ответ 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.