¿Cómo puede continuar una connection en segundo plano con NSURLConnection mientras se encuentra en primer plano?

He estado buscando literalmente semanas para tratar de encontrar una respuesta, o un ejemplo de cómo hacer esto.

Todos los ejemplos / tutoriales para NSURLConnection lo muestran comenzando en primer plano o comenzando en segundo plano, junto con todos los ejemplos de beginBackgrounTaskWithExpirationHandler: muestra cómo iniciar una tarea de background después de ingresar el background.

Por lo que puedo decir, no hay nada en Internet ni libros que muestren cómo iniciar una connection mientras se encuentra en primer plano y, si no está terminado, continúen en segundo plano.

La respuesta a esta pregunta en realidad no responde a la pregunta:

¿Cómo debería comenzar el event handling background con el manejador de la respiración: se tratará con una connection NSUrl que ya esté en progreso?

Si lees la sección de Beyond The Basics referida, dice: "Mientras la aplicación esté en primer plano, la tarea de background no tendrá ningún efecto". Esto significa que no es posible iniciar una tarea en segundo plano utilizando NSURLConnection en primer plano si desea download en primer plano.

Simplemente llama a beginBackgroundTaskWithExpirationHandler: mientras tu aplicación está en primer plano justo cuando comienzas el process de descarga. Tenga en count que debe almacenar el valor devuelto en una propiedad ivar /:

 @property (nonatomic, assign) UIBackgroundTaskIdentifier backgroundTaskID; @synthesize backgroundTaskID; ... NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; self.backgroundTaskID = [[UIApplication shanetworkingApplication] beginBackgroundTaskWithExpirationHandler:^{ // Cancel the connection [connection cancel]; }]; 

Esto permitirá que su aplicación siga funcionando si se envía a segundo plano mientras se ejecuta la descarga. Luego, en los methods de delegado que indican la finalización de la descarga, debe colocar el correspondiente endBackgroundTask: ::

 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { // Handle the error ... [[UIApplication shanetworkingApplication] endBackgroundTask:self.backgroundTaskID]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { // Save the downloaded data ... [[UIApplication shanetworkingApplication] endBackgroundTask:self.backgroundTaskID]; }