下载完成后如何更新UITableViewController

时间:2014-06-03 21:10:13

标签: ios objective-c nsurlsession

我有一个tableViewController,当它加载一个单元格时,它会调用另一个类DownloadData UIOBject,它会初始化一堆数据。该类调用下载文件的下载程序。我不想等待下载此文件以初始加载我的表,但该表包含下载数据的字段。我想在桌面完成后刷新桌面。下载完成后,调用方法:

- (void)         URLSession:(NSURLSession *)session
               downloadTask:(NSURLSessionDownloadTask *)downloadTask
  didFinishDownloadingToURL:(NSURL *)location

位于DownloadData类中。在调用时,我可以使用上述方法的最佳方法是强制我的表视图更新?谢谢!

2 个答案:

答案 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]?或者你有什么确切的问题?