如何解决如何使用ASIHTTPRequestASYNC跟踪下载进度
|| 我目前在网站上使用异步调用我的API(我设置)。我正在将ASIHTTPRequest的setDownloadProgressDelegate与UIProgressView一起使用。但是我不知道如何调用选择器(updateProgress),该选择器会将CGFloat \'progress \'设置为progressView \的进度。我尝试了以下方法,但是两个进度均为零。请您告诉我如何进行这项工作?(in some method)
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:[url stringByAppendingFormat:@\"confidential\"]]];
[request setDownloadProgressDelegate:progressView];
[NSTimer scheduledTimerWithTimeInterval:1.0f/60.0f target:self selector:@selector(updateProgress:) userInfo:nil repeats:YES];
[request setCompletionBlock:^{~100 lines of code}];
[request setFailedBlock:^{~2 lines of code :) }];
[request startAsynchronous];
- (void) updateProgress:(NSTimer *)timer {
if (progressView.progress < 1.0) {
currentProgress = progressView.progress;
NSLog(@\"currProg: %f --- progressViewProg: %f\",currentProgress,progressView.progress);
}
else {
[timer invalidate];
}
return;
}
解决方法
尝试添加到您的请求中:
[request setShowAccurateProgress:YES];
它不会帮助您调用updateProgress
,ASIHTTPRequest
会更改进度指示器本身。
, 对于仍在寻找此答案的人们:请注意,不建议使用ASI,而应改用NSURLSession或ASIHTTPRequest。
实现您想要的一种方法是将ѭ4设置为您自己的类并实现setProgress:
。在此实现中,更新您的进度变量,然后调用[progressView setProgress:];
或在代码中,设置请求的下载进度委托:
[request setDownloadProgressDelegate:self];
然后将方法添加到您的类中:
- (void)setProgress:(float)progress
{
currentProgress = progress;
[progressView setProgress:progress];
}
, 顺便说一句:下载内容时,NS * Connection似乎比ASI *快很多。
无论如何,此页面上的示例都意味着您不需要手动将值从下载对象“复制”到进度视图对象。
实际上,基于计时器的代码正在从进度视图中获取进度,该视图应该已经显示了进度。如果我正确理解ASIHTTP *,那么在此代码中根本就不需要计时器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。