2012-08-12 30 views
0

我有一個UITableView,包含每個單元格中的一些視圖,其中一個視圖是UIImageView。 在cellForRow方法中,我使用圖像加載UIImageView,但有時,UIImageView只顯示黑屏。UIImageView黑色不一致

我認爲這可能是由於兩個原因 - 損壞的UIImage或內存問題。這個UIImage沒有被破壞(它始終是相同的UIImage),我甚至檢查了當我把一個手動破壞的圖像 - >它變成了白色!不黑...

我檢查是否有一些內存警告,ViewDidUnload啓動 - >什麼都沒有。即使在模擬器中模擬的內存警告也沒有,它與此無關。

有人有任何線索爲什麼會發生?

謝謝!


這是我的cellForRow方法。 基本上,它是一個UIWebView和UIImageView在頂部的單元格列表,當表格滾動時,我隱藏webview並顯示imageview,反之亦然。也許它與我的問題有關,但我懷疑它,因爲圖像是相同的,並且uiimagaview沒有被釋放。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    ImMailMessage *message = [_messages objectAtIndex:indexPath.row]; 

ImFullMessageTableViewCell *cell = (ImFullMessageTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"ImFullMessageTableViewCell"]; 

if (cell == nil) 
{ 
    cell = [[[NSBundle mainBundle] loadNibNamed:@"ImFullMessageTableViewCell" owner:self options:nil] objectAtIndex:0]; 
    cell.delegate = self; 

    //add gestures 
    UIPinchGestureRecognizer *pinchGesture = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(cellPinched:)] autorelease]; 
    [cell addGestureRecognizer:pinchGesture]; 
    pinchGesture.delegate = self; 

    UIPanGestureRecognizer *panGesture = [[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(cellPanned:)] autorelease]; 
    panGesture.minimumNumberOfTouches = 2; 
    [cell addGestureRecognizer:panGesture]; 
    panGesture.delegate = self; 

} 


cell.threadState = _state; 
cell.mailMessage = message; 


UIImage *image = [self imageForMailMessage:message]; 
if (!image) 
{ 
    // if no image, put the webview and reload it. 
    cell.webView.mailMessage = message;  
    cell.webViewImageView.hidden = YES; 
    cell.webViewImageView.image = nil; 
    [cell.webView reloadMailMessage]; 

} 
else // image exists! 
{ 
    cell.webViewImageView.image = image; 

    // replace the web view with the recived image. 
    [cell replaceWebViewWithImageView]; 
} 


return cell; 
} 
+1

你可以發佈你的cellForRow代碼嗎? – pdesantis 2012-08-12 15:15:04

+0

爲了更好地解決您的問題,我們將需要您的cellForRowAtIndexPath代碼:方法 – Cezar 2012-08-12 18:19:01

+0

嗨,添加cellForRow方法... – 2012-08-12 18:36:59

回答

1

所以在你的「cellForRow」,您第一次嘗試回收舊電池,然後如果沒有可用您創建一個新的。你在某種程度上可以訪問UIImageView(或者你正在使用單元提供的那個)

我會做的第一件事是在cellForRow甚至不設置圖像 - 找到UIImageView,然後其記錄或斷言(),它的存在,然後設置背景色爲綠色說「:

imageView.backgroundColor =的UIColor綠彩];

如果你看到一堆綠色的矩形您的影像是,那麼你可以繼續下一步(在刪除綠色背景之後!),然後設置圖像 - 但是每次圖像設置爲LOG時,即在設置圖像之前記錄圖像,這樣可以100%確定實際上你有一個有效的圖像。

如果你得到這麼多,你得到了綠色,你的圖像記錄,但它仍然無法正常工作,然後添加評論,我會檢查回來。

編輯:所以繼續不寫一個圖像 - 你應該有一個imageView現在只是繪製它的背景。

添加一個委託方法: 「 - (空)的tableView:(UITableView的*)的tableView willDisplayCell:(的UITableViewCell *)細胞forRowAtIndexPath:(NSIndexPath *)indexPath 」

把日誌那裏,每個細胞,記錄它的索引,imageView,imageView.backgroundColor和imageView.image(應該是nil!)。我懷疑你會發現背景顏色不是綠色,或者有一些圖像

+0

嗨,首先我添加了cellForRow方法。 這是一個自定義單元,所以它有它自己的UIImageView。 我看到了綠色的樹脂和原木,但仍然有時看起來很黑。不要爲什麼,很奇怪...... – 2012-08-12 18:37:31

+0

好 - 所以即使沒有設置圖像,有時它是黑色的。那麼,這意味着它與你的形象無關 - 我現在編輯我的答案。所以當你創建一個單元格時,你添加了一個新的UIImageCView,當你得到一個循環單元格時,你只需從單元格contentView中檢索出imageView? – 2012-08-12 19:34:28

+0

好的,發現問題了!問題出在圖像上。我捕獲了下面的webview,但是我有時在webview被隱藏時做了。那就是問題所在!你實際上通過我做的測試把我帶到了解決方案。謝謝! – 2012-08-13 08:36:50