UIImageView变黑不一致

时间:2012-08-12 14:58:43

标签: iphone objective-c ios uitableview uiimageview

我有一个UITableView,每个单元格中包含一些视图,其中一个视图是UIImageView。 在cellForRow方法中,我使用图像加载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 个答案:

答案 0 :(得分:1)

所以在你的“cellForRow”中,你首先尝试回收旧的单元格,然后如果没有,你可以创建一个新的单元格。之后你以某种方式访问​​UIImageView(或者你正在使用单元提供的那个?)

我要做的第一件事是在cellForRow中甚至没有设置图像 - 找到UIImageView,然后记录它或断言()它的那里,然后设置背景颜色说绿色“:

imageView.backgroundColor = [UIColor greenColor];

如果你看到一堆绿色矩形所在的图像,那么你可以继续下一步(删除那个绿色背景!),并设置图像 - 但每次设置图像时都是LOG,即在设置之前记录图像,这样你就可以100%确定实际上你有一个有效的图像。

如果你到目前为止,你得到绿色,你的图像记录,但它仍然无法正常工作,然后添加评论,我会检查。

编辑:所以继续不写图像 - 你应该有一个imageView现在只是绘制它的背景。

添加委托方法:“ - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath “

在那里放一个日志,为每个单元格记录它的索引,imageView,imageView.backgroundColor和imageView.image(应该是nil!)。我怀疑你会发现backgroundcolor不是绿色,或者有一些图像