2015-01-07 11 views
20

W aplikacji na iOS 8.1 używam NSURLSessionDownloadTask do pobierania archiwum w tle, które czasami może być dość duże.Co stanie się, jeśli miejsce na dysku skończy się podczas używania NSURLSessionDownloadTask w tle?

Wszystko działa dobrze, ale co się stanie, gdy w telefonie skończy się miejsce na dysku? Czy pobieranie się nie powiedzie i wskaże, że był to problem z pozostałym miejscem na dysku? Czy jest jakiś dobry sposób na sprawdzenie z wyprzedzeniem?

+1

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

+1

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

+0

@Mrunal To nie rozwiązuje całkowicie problemu. A co, jeśli jest inna aplikacja pobierająca duży plik w tle? – HAS

Odpowiedz

9

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]; 
    } 
} 
Powiązane problemy