2010-12-02 43 views
0

我正在創建一個使用Web服務的應用程序。並檢索用戶列表,並獲取像圖像,用戶ID和名稱等詳細信息。我在表視圖中顯示與用戶有關的所有信息,因此每個單元格表格視圖有一張圖片,裏面有表格。我正在使用自定義單元格類來創建單個單元格。選擇表格中的任何一行都會顯示詳細視圖(使用導航),其中顯示了較大的圖像以及與我選擇的特定用戶相關的所有詳細信息。如何提高在表視圖的單元格中使用UIWebView的性能?

在自定義單元格和詳細視圖類我正在使用web視圖來顯示圖像。 但是,當我運行應用程序的圖像得到了一點延遲顯示和相同的細節視圖發生。

是否有任何替代方案,以便我可以提高表視圖的性能,這樣我就可以順利滾動表視圖,而無需在圖像加載和詳細視圖中進行任何延遲? 這裏是代碼...

- (UITableViewCell *)tableView:(UITableView *)tableView 
      cellForRowAtIndexPath:(NSIndexPath *)indexPath 

{ 
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier "; 

CustomCell *cell = (CustomCell *)[tableView 
            dequeueReusableCellWithIdentifier: CustomCellIdentifier]; 
if (cell == nil) 
{ 

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil ]; 
    //cell = [[CustomCell alloc] initwi ]; 
    for (id oneObject in nib) 
     if ([oneObject isKindOfClass:[CustomCell class]]) 
      cell = (CustomCell *)oneObject; 

} 
NSUInteger row = [indexPath row]; 
NSString *imageName = [imgArray objectAtIndex:row]; 
NSString *completeImageUrl = [[NSString alloc] initWithFormat:@"http://122.160.153.166:201/%@", imageName]; 

NSURL *url = [NSURL URLWithString:completeImageUrl]; 
//NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
NSData *imageData = [[NSData alloc] initWithContentsOfURL:url]; 
UIImage *image = [UIImage imageWithData:imageData];  /// check to see if we are getting all the arrays such as image array and userId array and name array of same size.. 
if(image == nil) 
{ 

} 
cell.imgView.image = image;        /// other wise an execption of out out array range will be shown 

[image release]; 
[imageName release]; 

//[cell.webView initWithFrame:CGRectZero]; 
//[cell.webView loadRequest:requestObj]; 
//cell.webView.frame = CGRectMake(20, 0, 80.0, 64); 
cell.userIdLabel.text = (NSString *)[userId objectAtIndex:row]; 
cell.nameLabel.text = (NSString *)[userName objectAtIndex:row]; 
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
return cell; 

}`

我認爲問題可以在imgArray陣列,因爲我從其他類中設置它。我在哪裏請求Web服務並獲取有關用戶的所有數據。

任何幫助,非常感謝。在此先感謝

回答

0

還好最後我從我的應用程序刪除uiweb視圖,並用於成像視圖nd成功。 我使用了tweetie的開發者給出的鏈接。這裏是link text

我使用了ABTableViewCell類,並使用代碼創建了整個單元格。 當我執行應用程序時,滾動非常生澀。在應用了近4個小時並藉助懶加載後,我能夠順利運行我的應用程序。我保存它從URL檢索到一個數組,然後應用於的tableView概念中的數據:的cellForRowAtIndexPath: 方法..

感謝你們對我的幫助......

-1

Three20有一個富文本表格視圖單元格類(TTStyledTextTableCell我認爲) - 應該呈現比嵌入式UIWebView顯着更快。您也可以推出自己的產品,但這需要更長的時間。

+0

我嘗試了圖像視圖還,但我應用程序崩潰了幾次。你有沒有與該班級的任何聯繫。感謝您的回覆 – Rakesh 2010-12-02 05:43:38

+0

文檔位於http://api.three20.info/interface_t_t_styled_text_table_cell.php - 實際上甚至有一個函數(`[TTStyledText textFromXHTML:]`),它將簡單的XHTML轉換爲可以粘貼的樣式文本塊在細胞中。 – Ertebolle 2010-12-02 05:48:37

0

使用UIWebView來顯示單個圖像是矯枉過正。您應該使用NSURLConnection(或許多替代HTTP包裝器/庫中的一個)來加載圖像數據,並使用UIImageView將其顯示在每個表格單元格中。根據我的經驗,在使用UIWebView時,沒有辦法(或者至少沒有直接的方法)消除渲染延遲。

+0

我沒有使用圖像視圖,但在ui表格視圖單元格中使用圖像視圖,然後滾動表格視圖結果導致應用程序崩潰,應用程序也崩潰,選擇表格中的任何行以顯示詳細視圖。 – Rakesh 2010-12-02 05:57:19

+0

應用程序的任何崩潰都是由於您的錯誤,而不是使用'UIImageView`。我總是在我的項目中使用這種方法,其他許多項目也是如此。 – 2010-12-02 06:11:17

+0

我把上面的代碼粘貼在mah quesn中,你可以告訴我我犯的錯誤嗎? – Rakesh 2010-12-02 06:35:41

0

你爲什麼使用webview來顯示圖像。應該使用ImageView代替。如果您從服務器獲取圖像,那麼您應該將這些圖像置於單獨的線程中,在收到圖像後,您應該重新加載該特定行。

一些代碼片段是這樣的:

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    ... 
    ... 
    UIImage *img = (UIImage *)[imagesArray objectAtIndex:indexPath.row]; 
    if(img == nil){ 
     [imgView setImage:temporaryImage]; 
     [NSThread detachNewThreadSelector:@selector(getTheThumnbails:) toTarget:self withObject:indexPath]; 
    } 
    else 
     [imgView setImage:img]; 

尋求進一步的幫助看看this

希望這有助於。

感謝,

Madhup

2

我得到了同樣的問題。爲此我使用了EGOImageCache和一些東西。 找到這個Url for EGOImage

下載文件這些名稱以「EGO」開頭,並將它們添加到您的項目中。

,寫在任何你想放的圖像下面的代碼:

EGOImageView *imgView = [[EGOImageView alloc] initWithFrame:CGRectMake(50,50,220,360)]; 
NSString *imageName = [imgArray objectAtIndex:row]; 
NSString *completeImageUrl = [[NSString alloc] initWithFormat:@"http://122.160.153.166:201/%@", imageName]; 

NSURL *url = [NSURL URLWithString:completeImageUrl]; 

imgView.imageUrl = url; 

[self.view addSubView:imgView]; 

完蛋了。使用類似的代碼,在任何你想要的圖像。 加載時第一次需要一些時間來下載圖像。但稍後它會緩存圖像並在下次使用它。

1

是否有任何替代,這樣我可以改善表視圖的表現讓我能有表視圖的平滑滾動帶出圖像加載

任何延誤對於這個答案是Lazy Loading of images in cells

您可以在webviewDidLoad實現延遲加載這表明網頁流量已經完全加載

相關問題