我正在使用ASINetworkQueue下载一系列要在特定视图中显示的图像。使用UIProgressView和ASIHTTPRequest跟踪下载进度
Mi问题是当我打开视图,然后在请求结束之前立即关闭视图,需要一段时间UIProgressView试图更新,然后崩溃(EXC_BAD_ACCESS),因为它不再存在(该观点被驳回)。我试图在卸载视图之前将代理设置为零,但它没有帮助。
这是负责创建队列中的部分代码并添加请求
- (void)doNetworkOperations
{
// Stop anything already in the queue before removing it
[[self networkQueue] cancelAllOperations];
// Creating a new queue each time we use it means we don't have to worry about clearing delegates or resetting progress tracking
[self setNetworkQueue:[ASINetworkQueue queue]];
[[self networkQueue] setDelegate:self];
// if I have little files to download, use accurate progress
// if I have lots, it's not worth it.
if ([promosInfo count]<=4) {
[[self networkQueue] setShowAccurateProgress:YES];
}
[[self networkQueue] setDownloadProgressDelegate:progressControl];
[[self networkQueue] setRequestDidFinishSelector:@selector(requestFinished:)];
[[self networkQueue] setRequestDidFailSelector:@selector(requestFailed:)];
[[self networkQueue] setQueueDidFinishSelector:@selector(queueFinished:)];
NSInteger i=0;
for (id row in promosInfo){
NSURL *url = [NSURL URLWithString: [row objectForKey:@"imgSource"]];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL: url];
[request setTag:i];
[[self networkQueue] addOperation:request];
i++;
url = nil;
request = nil;
}
[[self networkQueue] go];
}
和我有以下viewDidUnload
- (void)viewDidUnload
{
[[self networkQueue] setDownloadProgressDelegate:nil];
[[self networkQueue] cancelAllOperations];
[self setNetworkQueue:nil];
[self setCargando:nil];
[self setScrollView:nil];
[self setPageControl:nil];
[self setStatusLabel:nil];
[self setProgressControl:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
我如何告诉ASINetworkQueue停止追踪进展?正如我所提到的,我尝试将委托设置为零,但它似乎没有工作。
我真的很喜欢你的解决方案,但它仍然会尝试访问UIProgressView并且访问不良。 – Daniel 2012-03-18 18:36:51
我已编辑答案,请再次添加此代码 – Lunayo 2012-03-18 18:44:23