0

我有一个表格视图,其中填充了来自 json 的数组。我还获得了用户的个人资料图像,并且必须在由数组填充的 msgs 旁边加载。

我在这里有两个问题:

1>我是否需要先在主线程上填充表格视图,然后在主线程填充的背景中填充图像,或者是否有其他解决方案可以解决上述过程?

2> 如果加载图像需要时间并且有人已经从 tableview 中删除了 msg,我如何将它准确加载到 msg 的位置。tableview 是否知道该特定单元格中的对象已被删除,因此该图像是在后台加载被省略并继续。或者我是否需要将整个线程保留在主线程上,直到消息和图像都被加载?

请建议我哪个是您已经实施的最佳解决方案或解决方案。请将此问题视为所有tableview ios6架构爱好者和初学者的询问。

请分享与上述问题 ios6 故事板架构相关的任何链接/数据。

提前致谢。

4

1 回答 1

1

1>我是否需要先在主线程上填充表格视图,然后在主线程填充的背景中填充图像,或者是否有其他解决方案可以解决上述过程?

所有 UI 更改都必须在主线程上完成。但是图像的下载(以及任何处理,比如如果你想绕过角落)应该在后台线程上完成。

2> 如果加载图像需要时间并且有人已经从 tableview 中删除了 msg,我如何将它准确加载到 msg 的位置。tableview 是否知道该特定单元格中的对象已被删除,因此该图像是在后台加载被省略并继续。或者我是否需要将整个线程保留在主线程上,直到消息和图像都被加载?

表格视图反映了数据源中的任何内容。除了表格单元格之外,它不会为您跟踪任何内容。如果用户删除了一条消息并且图像尚未下载,您应该取消该图像的下载。

对于图像下载,您可能需要查看SDWebImage库,它会为您完成很多工作。它启用了“setImageWithURL”方法,您可以像这样使用它:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"MyIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:MyIdentifier] autorelease];
    }

    // Here we use the new provided setImageWithURL: method to load the web image
    [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                   placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

    cell.textLabel.text = @"My Text";
    return cell;
}
于 2013-03-22T19:01:15.227 回答