我有一个奇怪的问题。我正在使用一个AQGridView,它有一个类似于表视图控制器的方法,我已经定义如下:
- (AQGridViewCell *)gridView:(AQGridView *)aGridView cellForItemAtIndex:(NSUInteger)index
{
static NSString *CellIdentifier = @"IssueCell";
AQGridViewCell *cell = (AQGridViewCell *)[gridView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
[[NSBundle mainBundle] loadNibNamed:@"IssueCell" owner:self options:nil];
cell = [[AQGridViewCell alloc] initWithFrame:self.gridViewCellContent.frame
reuseIdentifier:CellIdentifier];
[cell.contentView addSubview:self.gridViewCellContent];
cell.selectionStyle = AQGridViewCellSelectionStyleNone;
}
IssueCell *content = (IssueCell *)[cell.contentView viewWithTag:1];
//This model object contains the title, picture, and date information
IssueModel *m = (IssueModel *)[self.issues objectAtIndex:index];
//If we have already downloaded the file, set the alpha to 1
if ([m hasPdfBeenDownloaded])
{
content.downloadIcon.hidden = YES;
content.imageView.alpha = 1;
content.progressView.hidden = YES;
}
else
{
if (m.pdfDownloadRequest && m.pdfDownloadRequest.isExecuting)
{
content.downloadIcon.hidden = YES;
content.imageView.alpha = .2;
content.progressView.hidden = NO;
}
else
{
content.downloadIcon.hidden = NO;
content.imageView.alpha = .2;
content.progressView.hidden = YES;
}
}
content.title.text = m.title;
// Only load cached images; defer new downloads until scrolling ends
if (!m.coverImageIcon)
{
if (self.gridView.dragging == NO && self.gridView.decelerating == NO)
{
[self startIconDownload:m forIndex:index];
}
content.imageView.image = [UIImage imageNamed:@"grid_cell_loading.png"];
}
else
{
content.imageView.image = m.coverImageIcon;
}
return cell;
}
我的问题是因为细胞被重复使用,我失去了正确的进度指示并更新了它。我使用ASIHTTP如下:
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:model.issuePdfUrl];
request.userInfo = [NSDictionary dictionaryWithObjectsAndKeys:ic, @"cell", model, @"model", nil];
model.pdfDownloadRequest = request;
[request setShouldContinueWhenAppEntersBackground:YES];
[request setDelegate:self];
[request setDownloadDestinationPath:mediaPath];
[request setDownloadProgressDelegate:ic.progressView];
[request startAsynchronous];
我遇到的问题是当我向下滚动然后滚动备份时,我失去了以前用过的可重复使用的进度视图。
这样做的正确方法是什么,所以我不会丢失进度视图?
答案 0 :(得分:1)
据我所知,你将progressView绑定到一个单元格(例如,第一个单元格),然后滚动到第二个单元格,它正在创建。然后第三个。第三个可能重用第一个单元格。但是没有重新创建progressBar,你重复使用它。
所以你有一个progressBar,但有两个指向它的ASIHTTPRequests。那不太好。
我能建议什么?好。您可以在gridView:cellForItemAtIndex:call期间使用progressBar更新downloadProgressDelegate的链接。这是更好的路径。您还可以删除单元格的可重用性。这可能有所帮助,但不太可行,并且可能在将来导致问题(例如内存泄漏)。
另一种方法是制作一些获取所有进度消息的方法。并使用这些消息将进度数据映射到网格模型。