ios - ¿Qué sucede si el espacio en disco se agota al utilizar NSURLSessionDownloadTask en segundo plano?
(1)
Puede obtener el espacio en disco disponible para un dispositivo de usuarios como este:
- (NSNumber *)getAvailableDiskSpace
{
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/var" error:nil];
return [attributes objectForKey:NSFileSystemFreeSize];
}
Es probable que necesite iniciar la descarga para obtener el tamaño del archivo que está descargando. Existe un método de delegado conveniente para NSURLSession que le da los bytes esperados a la derecha mientras se reanuda la tarea:
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
{
// Check if we have enough disk space to store the file
NSNumber *availableDiskSpace = [self getAvailableDiskSpace];
if (availableDiskSpace.longLongValue < expectedTotalBytes)
{
// If not, cancel the task
[downloadTask cancel];
// Alert the user
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Low Disk Space" message:@"You don''t have enough space on your device to download this file. Please clear up some space and try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
}
En una aplicación iOS 8.1, estoy usando NSURLSessionDownloadTask
para descargar un archivo en segundo plano que a veces puede ser bastante grande.
Todo funciona bien, pero ¿qué pasará si el teléfono se queda sin espacio en el disco? ¿La descarga fallará e indicará que fue un problema de espacio de disco restante? ¿Hay alguna buena manera de comprobar con antelación?