NSURLSession didFinishDownloadingToURL file temporalmente descargado no encontrado

Tengo un problema extraño con NSURLSession en el método de delegado didFinishDownloadingToURL.

Lo primero que estoy haciendo es verificar si existe el file temporal descargado:

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { if (![[NSFileManager defaultManager] fileExistsAtPath: [location path]]) { NSLog(@"Error. File not found"); return; // is giving error when the app is wake up by the system } ... } 

Funciona normalmente cuando la aplicación está en primer plano y descarga termina. Pero cuando la aplicación está en segundo plano y el sistema operativo lo mata a la fuerza, devuelve falso.

¿Alguien tiene alguna idea de lo que podría estar sucediendo? Sé que hay un límite de time para la ejecución de este método de delegado cuando la aplicación es activada por el sistema operativo, ya que no tiene sentido que el file temporal no esté allí. Ni siquiera puedo copyrlo en otra location … ¿Tiene sentido ser debido al tamaño del file? Estoy descargando un file de + -130MB.

Gracias.

Resolví el mismo problema al instalar la aplicación después de la aplicación de desinstallation. Parece que la NSURLSession deja residuos en el sistema cuando se produce el apagado forzado mientras una session de networking funciona.

De los Apple Docs :

(la location es …) "Una URL de file para el file temporal. Debido a que el file es temporal, debe abrir el file para leerlo o moverlo a una location permanente en el directory del contenedor de sandbox de su aplicación antes de regresar de este método de delegado.

Si optas por abrir el file para leer, deberías hacer la lectura real en otro hilo para evitar bloquear la queue de delegates ".