iphone ios nsurlconnection null

iphone - ¿Cuándo devuelve el nulo de initWithRequest de NSURLConnection?



ios null (5)

Creo que esto se produce si la solicitud u especificada tiene un valor incorrecto o no todos

¿Alguien sabe en qué situaciones inicializar un NSURLConnection devuelve nil en lugar de la conexión creada. La documentación dice que es posible, pero no puede especificar cuándo sucede esto.

El método / mensaje en cuestión:

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

-

Según la NSURLConnection clase NSURLConnection :

Valor de retorno: la conexión de URL para la solicitud de URL. Devuelve nil si no se puede inicializar una conexión.

La guía de programación del sistema de carga de URL dice lo siguiente:

Si NSURLConnection no puede crear una conexión para la solicitud, initWithRequest: delegate: devuelve nil.

-

Si bien es posible que este método devuelva nulo, no puedo encontrar un escenario que lo active. He probado los siguientes escenarios:

  • URLRequest con una url vacía: connection:didFailWithError: método de delegado se llama con "URL no compatible" como error.
  • URLRequest con url no válida: connection:didFailWithError: método de delegado se llama con "URL incorrecta" como error.
  • URLRequest con url inexistente: connection:didFailWithError: se llama al método delegado con "No se pudo encontrar un servidor con el nombre de host especificado". como error
  • Solicitud válida pero sin conexión a Internet: connection:didFailWithError: se llama al método delegado con "La conexión a Internet parece estar fuera de línea". como error
  • solicitud nula: provoca un crash.

El método initWithRequest devolvió una NSURLConnection válida en cada escenario (además del último) y llamó a la connection:didFailWithError: con un error apropiado.

¿Alguien ha podido averiguar qué escenario hace que no se devuelva nada?


Creo que esto también se puede usar cuando falla la carga , no solo para inicializar . (La asignación se realiza por separado: ahí es donde probablemente te mordería un miembro bajo) Por lo tanto (supongo) podría fallar porque no tenías una red disponible (3G / Wifi) o simplemente no se pudo conectar al servidor. En cualquier caso, utilizar:

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

Para obtener el fallo real.

Es posible que pueda simular esto con la ausencia de una red, o incluso darle una URL incorrecta.


Intentaría todo lo anterior, excepto hacerlo en condiciones de poca memoria. IE, creo que sucederá cuando un malloc interno falle.


NSURLConnection devuelve nil si no se crea dentro de un runLoop.


Supongo que la respuesta es "Nunca". Parece que la única manera en que NSURLConnection para devolver nil está fallando en [super init]. ([super init] devolviendo nil) Pero como super clase de NSURLConnection es NSObject y NSObjects init solo devuelve self (nunca nil)

PS: Eso es para IOS SDK 4.0, en el emulador, puede ser diferente en el dispositivo.