我对此cellForItemAtIndexPath:(NSIndexPath *)indexPath
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *imageURL = [NSURL URLWithString:[[Listname objectAtIndex:indexPath.item]coverURL]];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];
dispatch_async(dispatch_get_main_queue(), ^{
shelfcell.bookCover.image = [UIImage imageWithData:imageData];
});
});
这一个shelfcell.bookCover.image
可以显示图像,但是当我使用
if (_checkversionfromBookPathF == 0.1){ shelfcell.bookCover.alpha = 0.5f;}
else if(_checkversionfromBookPathF == 1) { shelfcell.bookCover.alpha = 1.0f; }
图片仅显示_checkversionfromBookPathF == 1
,但会先显示此图片_checkversionfromBookPathF == 0.1
,然后_checkversionfromBookPathF == 1
为什么图片不能去shelfcell.bookCover.alpha = 0.5f;
请有人解释我。
答案 0 :(得分:2)
您无法使用'=='直接比较浮点数,请使用<或者>符号不是==。
重用相同的单元格可能存在一些问题。因为您在另一个线程中运行,所以在加载图像之前加载图像需要一些时间,此单元格可能会被重用于另一个执行了shelfcell.bookCover.alpha = 1.0f的indexPath
溶液 - >
NSInteger row=indexPath.row;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL *imageURL = [NSURL URLWithString:[[Listname objectAtIndex:indexPath.item]coverURL]];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];
dispatch_async(dispatch_get_main_queue(), ^{
//set image if below condition satisfies
if([tableView indexPathForCell:cell] . row == row){
shelfcell.bookCover.image = [UIImage imageWithData:imageData];
}
});