Подтвердить что ты не робот

Что произойдет, если пространство на диске закончится при использовании NSURLSessionDownloadTask в фоновом режиме?

В приложении iOS 8.1 я использую NSURLSessionDownloadTask для загрузки архива в фоновом режиме, который иногда может быть довольно большим.

Все работает отлично, но что произойдет, если в телефоне закончится дисковое пространство? Не будет ли загрузка неудачной и указать, что это проблема с оставшимся дисковым пространством? Есть ли хороший способ проверить заранее?

4b9b3361

Ответ 1

Вы можете получить доступное дисковое пространство для пользовательского устройства следующим образом:

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

Вероятно, вам нужно будет начать загрузку, чтобы получить размер загружаемого файла. Существует удобный метод делегирования для NSURLSession, который дает вам ожидаемые байты, как только задача возобновляется:

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