Как рассчитать прогресс режима MBProgressHUD при использовании с NSURLConnection?

Я пытаюсь использовать MBProgressHUD с NSURLConnection, но я не уверен, как заставить анимацию вращаться в MBProgressHUDModeDeterminate,

В основном у меня есть этот код в viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self fetchFromServer];

    self.HUD = [ [MBProgressHUD alloc] initWithView:self.view];
    self.HUD.labelText = @"Loading Schedule...";
    [self.view addSubview:self.HUD];
    self.HUD.dimBackground = YES;
    [self.HUD show:YES];
}

Когда это представление загружено, я вызываю метод для извлечения из базы данных. Я хочу, чтобы MBProgressHUD загружался. Тогда я хочу, чтобы это закончилось, как только данные были получены.

- (void)fetchFromServer
{

    NSURL *url = [[NSURL alloc] initWithString:@"url.com"];

    [NSURLConnection sendAsynchronousRequest:[ [NSURLRequest alloc] initWithURL:url] queue:[ [NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
     {
         NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

         NSArray *jsonObj = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding]
                                                                   options:0 error:&error];

             scheduleJSONArray = jsonObj;

             // Progress in HUD should end here after scheduleJSONArray is set

             [self.HUD hide:YES];
      } ];
}

Я не знаю, что использовать для обновления прогресса HUD. Кто-нибудь может помочь?

Спасибо

1 ответ

Вам лучше использовать AFNetworking:

MBProgressHUD *HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
// Set up HUD 

__weak ViewController *weakSelf = self;
NSURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:@"url.com" parameters:nil error:nil];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
__weak AFHTTPRequestOperation *weakOperation = operation;
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
  [weakSelf updateHUDForOpetation:weakOperation
                       totalBytes:totalBytesExpectedToRead
                        readBytes:totalBytesRead
                            index:[videoNames indexOfObject:videoName]
                            total:videoNames.count];
}];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
  [MBProgressHUD hideHUDForView:self.view animated:YES];
}];

Затем обновите HUD вручную. Как это:

- (void)updateHUDTotalBytes:(long long)totalBytes
                  readBytes:(long long)readBytes {
  MBProgressHUD *HUD = [MBProgressHUD HUDForView:self.view];
  HUD.mode = MBProgressHUDModeDeterminate;
  HUD.labelText = [NSString stringWithFormat:@"%lld/%lld", readBytes / 1024, totalBytes / 1024];
  HUD.progress = (double)readBytes / (double)totalBytes;
}
Другие вопросы по тегам