从表视图打开详细信息视图之前的延迟

时间:2014-02-15 15:13:16

标签: ios objective-c uitableview didselectrowatindexpath

我有一个表格视图,而不是用RSS源中的项目填充。选择行时,标题,链接,描述和图像将传递到详细视图。这有效但在选择行和打开详细视图之间存在明显的延迟。我正试图找到一种优化方法,以便延迟不太明显。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    GRSItemDetail *detail = [[GRSItemDetail alloc]initWithNibName:@"GRSItemDetail" bundle:nil];

    RSSItem *entry = [[channel items]objectAtIndex:[indexPath row]];

    NSURL *imageLink = [NSURL URLWithString:[entry bigImageURL]];
    NSData *data = [NSData dataWithContentsOfURL:imageLink];
    UIImage *image = [[UIImage alloc]initWithData:data];

    detail.titleString = [entry title];
    detail.descriptionString = [entry infoString];
    detail.urlString = [entry link];
    detail.itemImage = image;

    [self.navigationController pushViewController:detail animated:YES];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

1 个答案:

答案 0 :(得分:4)

延迟是由您使用NSData *data = [NSData dataWithContentsOfURL:imageLink];引起的。这是同步从Web下载数据并在发生这种情况时阻止主线程。

您应该让详细视图控制器在显示后处理异步下载。考虑使用像SDWebImage这样的库来简化这一过程。要启用此功能,请更改detail.itemImage以设置图像网址而不是图像本身,然后在配置详细信息视图时加载图像。