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
Post a Comment