除非存在该索引路径的图像,否则应该在我的任何给定表行中显示占位符。当我向下滚动时,前一个indexPath中的图像加载到默认值而不是释放。我知道之前有人帮我解决了同样的问题,但这是在我意识到缓存图像的重要性之前。在我的customCell方法中,我将UIImage属性设置为strong,然后发布viewDidUnload的图像。
NSString *imagename = [_imageCache objectForKey:indexPath];
UIImage *preview = [_imageCache objectForKey:imagename];
if (preview)
{
[[cell myImageView] setImage:preview];
}
else
{
[[cell myImageView] setImage:[UIImage imageNamed:@"CellLogo.png"]];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
// __block UIImage *preview = nil;
UIImage *preview = [UIImage imageWithData:object.iG];
// }
if (preview)
{
dispatch_async(dispatch_get_main_queue(), ^{
// if (cell)
[[cell myImageView] setImage:preview];
});
[_imageCache setObject:preview forKey:imagename];
}
});
}
答案 0 :(得分:1)
如错误消息所示,您尚未在代码中的任何位置声明imageFilename:
。默认情况下没有这样的方法,如果您希望可以在当前类中以该名称定义方法:
- (NSString *)imageFilename:(NSIndexpath *)indexpath {
//code here
}
如果您已经在其他地方使用过它,则需要导入该特定类并将此方法称为NSString *imagename = [myobject imageFilename:indexPath];
,其中myobject
是该类的对象。
答案 1 :(得分:1)
查找“细胞重用”。您需要在UITableViewCell子类中实现-prepareForReuse。它应该将图像重置为占位符或空白图像。