我有一个 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;
}