我有一个从Instagram获取数据的应用程序,并且有一个用户提要,每次用户滚动到底部时都会更新。但是,我注意到,当图像的新部分出现时,它会轻弹'几分之一秒(显示旧照片)。那不好。
显然有很多代码(我不使用像AFNetworking这样的库并使用NSURLSessionDownloadTask
),我会粘贴最重要的部分:
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:self.urlToPass];
NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
NSData *data = [[NSData alloc]initWithContentsOfURL:location];
NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
//... there is the code
} else {
NSArray *newPhotosFromFeed = [responseDictionary valueForKeyPath:@"data"];
[self.photos addObjectsFromArray:newPhotosFromFeed];
}
dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
});
}];
[task resume];
我做的是检查我们是否有阵列(旧照片),如果有,我们会向现有照片添加新照片。
这是collectionViewCell的实现:
myCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@" myCell" forIndexPath:indexPath];
if(!cell){
cell = (myCell *)[myCell cell];
}
cell.photoDictionary = self.photos[indexPath.row];
NSLog(@" Count is %d", [self.photos count]);
return cell;
如何删除那个讨厌的bug?
非常感谢任何建议!
答案 0 :(得分:1)
假设您发布的用于设置UICollectionViewCell
的代码来自您的collectionView: cellForItemAtIndexPath:
实施...
相反,如果只在那里设置photoDictionary
,您还应该配置单元格的视图。因此,这实际上是您配置单元格应显示的图像的位置。
如果photoDictionary
仅包含实际图像的URL,并且单独下载,则可能发生的情况是您的单元格中仍包含旧数据。所以它仍会显示较旧的图像。在这种情况下,您需要设置单元格的图像视图以显示一些占位符图像,或者只显示纯色。
您还可以在单元格的prepareForReuse
实施中执行上述操作,重置单元格。