[英]tableView load old images on cell
我有一個表格視圖,當用戶滾動底部時會加載新行。 這是代碼:
@implementation MainViewController{
short currentIndex;
NSNumber *currentPage;
MyCell *cell;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"bam bam?");
// Setting ivars
currentPage = @(1);
// Центр уведомлений. Подписываемся на уведомления чтобы знать, когда нужно обновить табличку.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadNotification:) name:@"updateTable" object:nil];
[self loadNews];
}
-(void)reloadNotification: (NSNotification*) notification{
NSLog(@"Recieved notify");
[self.tableView reloadData];
}
-(void)loadNews{
// page=1&limit=5&order_by=created_at&order=desc
[[MedsolutionAPI sharedInstance] getNewsWithParameters:self.parameters :^(NSMutableArray *newsArray) {
self.dataArray = newsArray;
}];
}
#pragma mark - table view delegate
// Метод который вызывается при нажатии на ячейку. Используем его для вызова метода performSegueWithIdentifier и сохранения текущего индекса.
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
currentIndex = indexPath.row;
// [self performSegueWithIdentifier:@"detail" sender:self];
}
// Высота ячейки
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 100;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
// Метод определяющий количество ячеек (соответствует количеству объектов массива objectsArray
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return [self.dataArray count];;
}
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
// Инициализация ячейки
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
// Получаем объект по соответствующему индексу
NewsParseer *news = [self.dataArray objectAtIndex:indexPath.row];
// Заполняем ячейку
cell.titleLabel.text = news.title;
cell.dateLabel.text = news.created_at;
// Загружаем изображение с помощью метода загрузки изображений библиотеки AFNetworking
[cell.myImageView setImageWithURL:[NSURL URLWithString:news.standardImage]];
return cell;
}
// Вызывается когда пользователь скролит вниз, для подгрузки новых ячеек
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSInteger currentOffset = scrollView.contentOffset.y;
NSInteger maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height;
if (maximumOffset - currentOffset <= -40) {
NSLog(@"reload");
// Add task
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
/* Создаем свою группу */
dispatch_group_t myGroup = dispatch_group_create();
/* Реализуем задачи в группе */
dispatch_group_enter(myGroup);
/* Имплементация */
currentPage = [NSNumber numberWithInt:[currentPage intValue] + 1];
[[MedsolutionAPI sharedInstance] getNewsWithParameters:self.parameters :^(NSMutableArray *newsArray) {
[self.dataArray addObjectsFromArray:newsArray];
}];
dispatch_group_leave(myGroup);
dispatch_group_wait(myGroup, DISPATCH_TIME_FOREVER);
});
}
}
#pragma mark - setters & getters
-(NSDictionary*)parameters{
return @{@"page": currentPage, @"limit" : @"5", @"order_by" : @"created_at", @"order":@"desc" };
}
我在MyCell.m
寫道:
-(void)prepareForReuse{
[self.myImageView cancelImageRequestOperation];
}
我的問題是-當我加載新行時,在不到一秒鍾的時間內,我可以在單元格上看到“舊”圖像。 那是常見的錯誤,但是在以前的項目中,使用
[self.myImageView cancelImageRequestOperation];
當我更改MyCell類的實現時:
-(void)prepareForReuse{
// Для избежания подгрузки неверных изображений, когда таблица пытается загрузить ячейки которые уже были использованны.
self.dateLabel = nil;
self.titleLabel = nil;
self.myImageView = nil;
[self.myImageView cancelImageRequestOperation];
}
新圖像停止加載,而是始終顯示“舊”圖像。
可以嘗試以下代碼。
-(void)prepareForReuse{
// Для избежания подгрузки неверных изображений, когда таблица пытается загрузить ячейки которые уже были использованны.
self.dateLabel = nil;
self.titleLabel = nil;
[self.myImageView cancelImageRequestOperation];
self.myImageView = nil;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.