Определите приращение NSProgressIndicator (Bar) путем сравнения размеров файлов

Я относительно новичок в Objective C, и мне было интересно, как правильно использовать элемент пользовательского интерфейса NSProgressIndicator. Чего я хочу добиться, так это, допустим, я знаю, каким будет окончательный размер файла, и файл в данный момент загружается.

  1. Как бы вы выбрали самый последний элемент в папке загрузок и узнали его текущий размер.
  2. Как бы вы отслеживали его состояние загрузки по сравнению со значением, которое вы уже знаете.
  3. Как бы вы отобразили это в файле NSProgressIndicator.

Пока у меня есть это, чтобы проверить размер файла:

NSString *filePath = [NSString stringWithFormat:@"~/Downloads/foo_bar"];
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
NSInteger fileSize = [[fileAttributes objectForKey:NSFileSize] integerValue];
NSString *fileSizeStr = [NSByteCountFormatter stringFromByteCount:fileSize countStyle:NSByteCountFormatterCountStyleFile];
NSLog(@"FileSize: %@",fileSizeStr);
return fileSizeStr;

И это для обновления индикатора выполнения:

[showProgress startAnimation:nil];
dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(backgroundQueue, ^{
    for (NSUInteger i = 0; i < 100; i++) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self->showProgress incrementBy:1.0];
        });
    }
    
    dispatch_async(dispatch_get_main_queue(), ^{
        [self->showProgress stopAnimation:nil];
    });
});

person gerrardo08    schedule 20.04.2021    source источник
comment
Отвечает ли это на ваш вопрос? Загрузить файл с индикатором выполнения в какао?   -  person Willeke    schedule 20.04.2021
comment
@Willeke спасибо, я бегло ознакомился с NSURLConnection, NSURLDownload, и это в некоторой степени помогает. Однако 3 пункта в моем вопросе являются наиболее важными аспектами с точки зрения того, чего я пытаюсь достичь.   -  person gerrardo08    schedule 21.04.2021
comment
Пожалуйста, прочитайте stackoverflow.com/a/2917456, вы можете узнать, что установить в качестве maxValue вашего NSProgressIndicator. Затем просто incrementBy: размер данных, которые ваше соединение только что получило.   -  person Willeke    schedule 21.04.2021