2014-02-15 97 views
0

我有一个表视图,而不是从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]; 
} 
+0

是的,因为你正在从didselect方法加载url中的数据。最好只将网址传递给GRSItemDetail,并将网址内容加载到GRSItemDetail的viewdidload中。 – Pawan

回答

4

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

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