2015-06-28 5 views
2

Я пытаюсь показать панель прогресса, когда я загружаю JSON с URL-адреса. JSON загружается правильно, но я не уверен, как показать индикатор прогресса. Я попытался использовать UIProgressView, но он не отображается на экране. Мы ценим любые предложения.Как показать ProgressBar с AFNetworking AFHTTPRequestOperationManager

CGFloat width = [UIScreen mainScreen].bounds.size.width; 
CGFloat height = [UIScreen mainScreen].bounds.size.height; 

CGRect rect = CGRectMake(width/2, height/2, width/5, height/5); 
UIProgressView *myProgressView = [[UIProgressView alloc]initWithFrame:rect]; 
myProgressView.progressViewStyle = UIProgressViewStyleBar; 
[self.view addSubview:myProgressView]; 

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
[manager GET:@"https:urlWithJson" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) 
     { 
      myProgressView.progress = (float)totalBytesRead/totalBytesExpectedToRead; 
     }]; 
     [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
      NSLog(@"operation Completed"); 
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
      NSLog(@"ERROR"); 
     }]; 

     [operation start]; 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"timeout Error: %@", error); 
    }]; 
+0

Имеет ли значение totalBytesExpectedToRead значение? HTTP-заголовок должен содержать размер документа, чтобы получить общие ожидаемые байты. – Thomas

+0

Я попытался вставить инструкцию NSLog внутри setDownloadProgressBlock, но ничего не печатал. Есть ли лучший способ добиться того, чего я хочу? – baskInEminence

ответ

5

Вы можете установить скачать незавершенное-блок внутри блока успеха, который немного слишком поздно;)

Попробуйте это:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
AFHTTPRequestOperation *operation = [manager GET:@"https:urlWithJson" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"Complete"); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 
    myProgressView.progress = (float)totalBytesRead/totalBytesExpectedToRead; 
}]; 
2

Простое решение для Swift:

let progress: UIProgressView? //for example, reference to IBOutlet 
let manager = AFHTTPRequestOperationManager() 
let operation = manager.POST(query, parameters: parameters, constructingBodyWithBlock: { multipartData in 

      //do sth with your multipartData 
    }, success: { operation, response in 

      //success 
    }) { operation, error in 

      //failure 
} 

progress?.setProgressWithUploadProgressOfOperation(operation!, animated: true) 

Вы ничего не делаете. Этого достаточно, чтобы показать прогресс в вашем представлении.

 Смежные вопросы

  • Нет связанных вопросов^_^