la pantalla de locking interrumpe la connection NSURLC

Me gustaría saber qué ocurre detrás de escena cuando el usuario bloquea y desbloquea la pantalla del iPad. Tengo una aplicación que descarga files usando NSURLConnection y las descargas fallan con un error SOAP ("No se pudo encontrar un server con el nombre de host especificado"), pero no cuando el usuario bloquea la pantalla, sino cuando la desbloquea. Independientemente del hecho cuando aparece el error, la descarga nunca termina. ¿Alguna idea de por qué y qué se podría hacer al respecto?

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:300]; NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest: request delegate: self]; 

Por lo que puedo decir, cuando presiono el button Inicio obtuve:

 applicationWillResignActive applicationDidEnterBackground 

y después de recordar la aplicación después de tres minutos obtengo:

 applicationWillEnterForeground 

y la descarga ya está terminada o ha progresado incluso en segundo plano.

Cuando lo dejo en segundo plano por más time (5 minutos), se agota con un error.

Cuando locking la pantalla obtengo el mismo order de estados de request, pero también un post de error acerca de la desconnection de la descarga.

¡Gracias!

Mi conjetura es que su connection se desconecta porque se está ejecutando cuando la aplicación entra en segundo plano, y no tuvo las implementaciones correctas para mantenerlo en ejecución. Tal vez debería echar un vistazo a la documentation de Antecedentes de ejecución y multitarea de Apple. Le mostrará cómo dejar que su aplicación se ejecute en segundo plano hasta aproximadamente 10 minutos sin que se finalice. Busque el siguiente código de ejemplo y descubra cómo podría resolver su problema:

 - (void)applicationDidEnterBackground:(UIApplication *)application { bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ // Clean up any unfinished task business by marking where you. // stopped or ending the task outright. [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; // Start the long-running task and return immediately. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Do the work associated with the task, preferably in chunks. [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }); }