我正在开发新闻应用程序。我正在使用表格视图来显示新闻。要从服务器下载数据,我正在使用 sendAsynchronousRequest 。
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if ([data length] > 0 && error == nil)
{
downloadedItem = [GNNewsItems saveDataToModel:data];
if ([self.delegate respondsToSelector:@selector(receivedResponse:)])
{
[self.delegate performSelectorOnMainThread:@selector(receivedResponse:) withObject:downloadedItem waitUntilDone:NO];
}
}
else if ([data length] == 0 && error == nil)
{
// Data not downloaded
}
else if (error != nil)
{
// error
}
}];
到目前为止一切顺利。现在考虑一个案例:
如何从表格视图中取消重复请求?
答案 0 :(得分:0)
创建一个NSMutableArray
,其中包含已启动请求的单元格的 indexPath 。在启动单元格中的新Web请求之前,检查是否已启动if请求。如果没有,则启动它,否则什么也不做。
答案 1 :(得分:0)
您的设计说明听起来好像您没有使用标准的模型/视图设计范例。您应该存储标题和其他相关数据,例如完整故事或某些数据存储区中的链接,例如,数组或CoreData等。该对象是请求故事和更新数据元素的对象。然后它只会在背景中执行一次,一旦完成,就完成了。
然后tableView使用该数据存储区来填充表格单元格。每当一个单元格滚动到视图中时,对于故事的空中请求是一个非常糟糕的设计。它存在您刚刚提到的设计问题,而且非常浪费用户带宽和服务器资源。