我正在尝试使用UIProgressView
从服务器下载图像时显示ASIHTTPRequest
。我想在使用此代码完美运行的UIProgressView
上显示进度:
[request setDownloadProgressDelegate:progressIndicator];
我想在进度条旁边显示%
,以便用户知道已下载的百分比。像这样的事情(我在Photoshop中做了这个):
我想到的是使用
- (void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes;
更新我的UILabel
,当ASI请求收到一定数量的字节时,总是调用此方法。
但要调用此方法,我必须在我的课程中实现它,然后setDownloadProgressDelegate
到self
,就像这样,
[request setDownloadProgressDelegate:self];
因此,我可以让request
对象同时拥有两个不同的代理,所以我可以同时收到回复吗?我只需要做一些数学来计算百分比并更新我的UILabel
- 我知道我正在下载的文件的确切大小。
答案 0 :(得分:3)
您想使用NSNotificationCenter。这允许您使用pub / sub模型松散地耦合对象。您可以从对象发布通知,任何数量的对象都可以获取信息,而无需委托的紧密耦合。
答案 1 :(得分:2)
任何对象都可以有多个委托,您只需跟踪它们即可。因此,您可以针对两种不同的方案使用两个单独的协议,并为每个委托提供两个id
个变量。这类似于UITableView
对其委托和数据源的作用,它可以是两个不同的对象。
答案 2 :(得分:2)
经过几个小时的阅读后,我终于找到了解决这个问题的最简单方法,ASIHTTPRequest有两种不同的方法可以帮助设置代理。
所以我做的是设置进度视图委托,而不是将自己设置为请求对象的委托。等,
[request setDownloadProgressDelegate:myProgressViewObject]; // For progress view increment
[request setDelegate:self]; // For adding methods such as finished downloading started downloading.
Mt的目的是让我的请求对象调用方法,
- (void)request:(ASIHTTPRequest *)request didReceiveBytes:(long long)bytes; // Now I can increment my UILabel percentage here.
通过设置
定期发送消息[request setDelegate:self];
希望这将有助于其他人!
干杯