我有一个tableViewController
,当它加载一个单元格时,它会调用另一个类DownloadData
UIOBject
,它会初始化一堆数据。该类调用下载文件的下载程序。我不想等待下载此文件以初始加载我的表,但该表包含下载数据的字段。我想在桌面完成后刷新桌面。下载完成后,调用方法:
- (void) URLSession:(NSURLSession *)session
downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
位于DownloadData
类中。在调用时,我可以使用上述方法的最佳方法是强制我的表视图更新?谢谢!
答案 0 :(得分:1)
我们的应用程序中有类似的设置。在较高的水平上,我们的cellForItemAtIndexPath
会立即返回一个虚拟的"占位符"单元格,然后开始下载真正的单元格。当我们开始下载时,我们会将单元格传递给下载程序,当下载完成后,它可以更改替换占位符与图像本身(确保在主线程上执行此操作)。
它看起来像这样:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UICustomCellWithImageView *cell = (UICustomCellWithImageView *)[collectionView dequeueReusableCellWithReuseIdentifier:YourCellID forIndexPath:indexPath];
[self.downloadManager downloadImageForCell:cell
completionBlock:^(){
[cell setPlaceholderHidden:YES animated:YES];
}];
return cell;
}
并在你的下载器上:
- (void)downloadImageForCell:(UICustomCellWithImageView *)cell (void(^)())completionBlock {
[self downloadImageWithCompletion:^(UIImage img) {
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = img;
if (completionBlock) {
completionBlock();
}
}
}
原谅任何编译器错误,我只是在这个窗口中编写了一些示例代码,因为事实证明obj-c是一种没有编译器/自动完成的硬编写语言=)。我们比这更复杂,因为我们不知道手头的图像大小,我不认为我们的下载器知道我们的自定义单元类,但我只是这样写的简单得到概念。
答案 1 :(得分:0)
[tableView reloadData]
?或者你有什么确切的问题?