Estoy ejecutando un NSURLConnection en un hilo separado (soy consciente de que es asincrónico y funciona cuando se ejecuta en el hilo principal), pero no hace llamadas delegadas incluso cuando pasar el hilo padre como el delegado. ¿Alguien sabe como hacer esto?NSURLCincronización asincrónica en un hilo separado no puede llamar a los métodos de delegado
Código:
-(void)startConnectionWithUrlPath:(NSString*)URLpath {
//initiates the download connection - setup
NSURL *myURL = [[NSURL alloc] initWithString:URLpath];
myURLRequest = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
[myURL release];
//initiates the download connection on a seperate thread
[NSThread detachNewThreadSelector:@selector(startDownloading:) toTarget:self withObject:self];
}
-(void)startDownloading:(id)parentThread {
NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];
[NSURLConnection connectionWithRequest:myURLRequest delegate:parentThread];
//The delegate methods are setup in the rest of the class but they are never getting called...
[pool drain];
}
EDITAR *
La razón por la que se necesita para ejecutar NSURLConnection en un hilo separado se debe a que estoy descargando algo en mi aplicación para el iPhone y la descarga se cancela cuando el el usuario bloquea la pantalla (continúa bien si el usuario simplemente presiona el botón de inicio y la aplicación entra en segundo plano). Entiendo que esto se debe a que estoy ejecutando la conexión de forma asíncrona en el hilo principal y no en uno separado.
También he probado este código (no en un hilo separado) al iniciar la NSURLConnection:
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:myURLRequest delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[connection start];
[connection release];
Pero tengo el mismo problema con esto con respecto a la descarga de ser cancelada en el bloqueo de la pantalla.
* ACTUALIZACIÓN
Para añadir a la respuesta de Thomas continuación (Tenga en cuenta que la respuesta de James Webster también es correcto con respecto a la excitante de un hilo) la documentación de Apple explican: "estado suspendido - La aplicación está en el fondo pero no está ejecutando el código. El sistema mueve las aplicaciones a este estado automáticamente y no las notifica antes de hacerlo. Mientras se suspende, una aplicación permanece en la memoria pero no ejecuta ningún código ".
Dado que cuando la pantalla está bloqueada por el usuario la aplicación se pone en el estado de fondo y de inmediato en el estado suspendido, se detiene la ejecución y se da ninguna descarga que advierta que va a suceder. . Puede haber una notificación que me dice que el usuario ha bloqueado la pantalla, pero todavía no he encontrado ninguna.
Por lo tanto, pause (guarde cierta información y cancele el NSURLConnection) todas las descargas cuando la aplicación pasa a segundo plano y la reanuda con el encabezado del rango HTTP cuando se vuelve a activar. Esta es una solución que está bien, pero no es ideal, ya que la descarga no se produce en segundo plano, lo que afecta negativamente la experiencia del usuario ... fastidio.
los métodos que está utilizando para la solicitud de NSURLConnection son asíncronos por lo tanto, incluso si no separa el nuevo hilo, será una operación multiproceso. – Ravin
Pregunta editada para explicar mejor mi problema. – Zigglzworth