Można dostać się na dostępnej przestrzeni dyskowej dla użytkowników urządzenia tak:
- (NSNumber *)getAvailableDiskSpace
{
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/var" error:nil];
return [attributes objectForKey:NSFileSystemFreeSize];
}
Najprawdopodobniej potrzebne, aby rozpocząć pobieranie, aby uzyskać rozmiaru pliku, który jest pobierany. Istnieje wygodna metoda delegowania dla NSURLSession, która zapewnia oczekiwane bajty w miarę wznawiania zadania:
- (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];
}
}
Przed rozpoczęciem pobierania należy uzyskać rozmiar pliku i sprawdzić wolne miejsce w urządzeniu. Aby powiadomić użytkownika, jeśli nie ma wystarczającej ilości wolnego miejsca. – Mrunal
Oto sposób sprawdzenia wolnego miejsca: http://stackoverflow.com/questions/5712527/how-to-detect-total-available-free-disk-space-on-the-iphone-ipad-device – Mrunal
@Mrunal To nie rozwiązuje całkowicie problemu. A co, jeśli jest inna aplikacja pobierająca duży plik w tle? – HAS