ios - 下载完成后如何更新 UITableViewController

标签 ios objective-c nsurlsession

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

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

它在 DownloadData 类中。使上述方法在调用时强制更新 TableView 的最佳方法是什么?谢谢!

最佳答案

我们在我们的应用程序中进行了类似的设置。在高层次上,我们的 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 是一种很难在没有编译器/自动完成的情况下编写的语言 =)。我们的比这复杂一点,因为我们事先不知道图像的大小,而且我认为我们的下载程序不知道我们的自定义单元格类,但为了简单起见,我只是这样写的概念。

关于ios - 下载完成后如何更新 UITableViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024970/

相关文章:

ios - Swift CodeUnit 到 String

ios - 附加您的 <bundle_ID> 目录。它是什么?

objective-c - 更好的性能设置 backgroundView : willDisplayCell or init?

ios - NSURLSession 如何仅检索标题?

ios - NSURLSession 任务文件下载发生在程序需要使用该文件之后

ios - 转换为Swift 3.0语法后,如何将类型“CBManagerState”的值转换为预期类型“CBCentralManagerState”?

iphone - UITableView节头为 'Floating'时可以更改吗?

ios - 不运行 Xcode 的位置模拟

ios - 在 iOS NSOperations 中包装 NSURLSessionTask 的优势

ios - 出现键盘时调整 UITextView 的大小