ситуации:UITableViewController загружает все мои клетки при прокрутке
У меня есть контроллер представления, которое имеет вид таблицы, которая принимает данные из массива. Поскольку данные этого массива довольно медленны для загрузки, я загружаю элементы по требованию (запускается в tableView: cellForRowAtIndexPath :).
Проблема:
В начале (то есть после того, как вид сделал нагрузки) он загружает только видимые ячейки (первые 6). Но тогда, когда вы пытаетесь прокрутить, он загружает всех остальных сразу! (Тестировано в контрольной точке нагрузки, по-видимому [UITableView _createPreparedCellForGlobalRow: withIndexPath:] вызывается для каждой строки)
Кодекс:
PlayerListDataModel.m
@implementation PlayerListDataModel
(...)
-(NSString *)nombre {
if (!self.loaded) [self load];
return _nombre;
}
-(void)load {
NSLog(@"Loading %d", self.sqlId);
[OMNIGAME loadListCell:self];
self.loaded = YES;
}
@end
PlayerListViewController.m
@implementation PlayerListViewController
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; }
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.jugadores.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"PlayerListCell";
PlayerListCell* cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell) {
cell = [[PlayerListCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}
PlayerListDataModel* data =[self.jugadores objectAtIndex:indexPath.row];
cell.dem = data.bestDem;
cell.nombre = data.nombre;
cell.apellido = data.apellido;
cell.escudo = data.escudo;
cell.equipo = data.equipo;
cell.age = data.edad;
cell.bandera = data.bandera;
cell.price = data.price;
cell.energia = data.energy;
cell.valor = data.valor;
return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return tableView.bounds.size.height/7;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return tableView.bounds.size.height/7;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
if (!self.search) {
self.search = [[PlayerSearchView alloc] init];
self.search.search.delegate = self;
}
return self.search;
}
Вопрос:
Это намеренное поведение? Если это так, если есть способ взломать его? Если нет, что я делаю неправильно?
Вы имеете в виду, что загружают все, все сразу? Или вы имеете в виду, что он создает новую ячейку для каждой строки и никогда не использует ее повторно? Примечание. Вы создаете новый PlayerDataModel, используется ли ячейка повторно или нет. – AMayes
Да, все они сразу, alomst 12.000 ... (О вашей заметке: [Player DataModel load] вызывается только один раз на экземпляр, потому что он устанавливает свой загруженный флаг в true) – BerinHardt
Вы, в любой момент, расширяете высоту вашего столаView? – AMayes