2014-02-15 134 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而不是圖像本身,然後在配置詳細信息視圖時加載圖像。