2015-01-07 11 views
20

iOS 8.1 uygulamasında arka planda arşivi indirmek için bazen oldukça büyük olabilen NSURLSessionDownloadTask kullanıyorum.Arka planda NSURLSessionDownloadTask kullanılırken disk alanı biterse ne olur?

Her şey iyi çalışıyor, ancak telefon disk alanı bittiğinde ne olacak? İndirme başarısız olur ve kalan disk alanı sorunu olduğunu gösterir mi? Önceden kontrol edilmenin iyi bir yolu var mı?

+1

indir başlamadan önce, dosya boyutunu almak ve cihazda boş alan kontrol: Görev sürdürme sağ olarak size beklenen verir bayt NSURLSession için uygun bir temsilci yöntemi yoktur. Yeterli boş alan yoksa kullanıcıyı bilgilendirebilirsiniz. – Mrunal

+1

Boş alanı kontrol etmenin bir yolu: http://stackoverflow.com/questions/5712527/how-to-detect-total-available-free-disk-space-on-the-iphone-ipad-device – Mrunal

+0

@Mrunal Bu problemi tamamen çözmez. Arka planda büyük bir dosyayı indiren başka bir uygulama varsa ne olur? – HAS

cevap

9

Böyle bir Kullanıcılar cihaz için kullanılabilir disk alanı elde edebilirsiniz:

- (NSNumber *)getAvailableDiskSpace 
{ 
    NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/var" error:nil]; 
    return [attributes objectForKey:NSFileSystemFreeSize]; 
} 

Büyük olasılıkla indirmekte olduğunuz dosyanın boyutunu almak için indirmeye başlamak gerekecektir.

- (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]; 
    } 
} 
İlgili konular