ios - tableView load old images on cell -


i have table view, load new rows when user scroll bottom. here code:

@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" }; } 

in mycell.m wrote:

-(void)prepareforreuse{     [self.myimageview cancelimagerequestoperation];  } 

my problem - when load new rows, fraction of second can see "old" image on cell. common bug, in previous project solved

[self.myimageview cancelimagerequestoperation];

when change implementation of mycell class for:

-(void)prepareforreuse{      // Для избежания подгрузки неверных изображений, когда таблица пытается загрузить ячейки которые уже были использованны.      self.datelabel = nil;     self.titlelabel = nil;     self.myimageview = nil;      [self.myimageview cancelimagerequestoperation];  } 

new images stop loading, instead show "old" images.

can yo try following code..

-(void)prepareforreuse{ // Для избежания подгрузки неверных изображений, когда таблица пытается загрузить ячейки которые уже были использованны.  self.datelabel = nil; self.titlelabel = nil;  [self.myimageview cancelimagerequestoperation]; self.myimageview = nil; 

}


Comments