En una de mis aplicaciones, estaba cargando una gran cantidad de datos. Definitivamente no puedo esperar que el usuario mantenga la aplicación en primer plano hasta que se descarguen los datos. Solo uso el siguiente código para descargar los datos mientras la aplicación está en segundo plano.Su funcionando correctamente :-)
favor vaya a través siguientes pasos:
1) Usar la siguiente línea en el archivo de cabecera de ViewController
@property (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
síntesis que en el archivo .m.
2) en viewDidLoad asigno UIBackgroundTaskIdentifier como:
self.backgroundTask = UIBackgroundTaskInvalid;
3) Uso siguiente línea de código, aquí sólo estoy guardando en el interior método getDataFromServer beginBackgroundTaskWithExpirationHandler: bloque.
self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}];
/* Here your downloading Code, let say getDataFromServer method */
[self getDataFromServer]; // Its dummy method
/* Your downloading Code End Here */
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
});
4) Si desea comprobar el tiempo restante para descargar los datos de antecedentes, son de la línea siguiente en applicationDidEnterBackground: (UIApplication *) Método delegado aplicación de AppDelegate:
NSLog(@"Background time remaining = %.1f seconds", [UIApplication sharedApplication].backgroundTimeRemaining);
¿finalmente pudo descargar ese archivo en segundo plano? – Mahesh
Consulte la respuesta de MMR a continuación. Verdadero fondo 'NSURLSession' es la mejor manera de lograr esto hoy en día. Todas estas otras respuestas son anteriores a esta técnica. Si tiene una descarga pequeña que necesita menos de 3 minutos para finalizar, la tarea de fondo está bien enfocada, pero para grandes descargas de fondo, use el fondo 'NSURLSession'. – Rob