我正在开发一个 iPhone 应用程序,它从服务器检索照片并将它们呈现在屏幕上,类似于 Pulse News Reader 呈现其文章的方式。我有一个垂直滚动UITableView
,每个都UITableViewCell
包含自己的自定义UITableView
实例,允许用户水平浏览照片。
我目前填充水平滚动表的cellForRowAtIndexPath
方式是在垂直滚动表的方法中进行服务器调用。每当一个新单元格进入视图时,我都会发送对该特定单元格照片的请求,如下面的代码所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"EventCell";
EventViewCell *cell = (EventViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[EventViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Event *event = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self performPhotoFetchForEventID:event.id inCell:cell withRetries:3];
return cell;
}
当用户缓慢滚动垂直表格时,此解决方案非常有效,但是如果用户快速滚动或“轻弹”列表,它就会开始崩溃。本质上,如果用户快速滚动浏览 X 事件,应用程序将触发 X 服务器请求并返回所有结果,即使应用程序的视图最多只需要其中三个请求的结果。这有时会导致图片显示在错误的行中,或者显示延迟。
如果用户滚动得太快,我如何防止/取消我的服务器请求。或者有没有更好的方法来实现这个以获得预期的效果?