状況:
配列からデータを取得するテーブルビューを持つビューコントローラーがあります。その配列のデータの読み込みが非常に遅いため、要素をオンデマンドで読み込みます (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;
}
質問:
これは意図した動作ですか? もしそうなら、それをハックする方法はありますか?そうでない場合、私が間違っていることは何ですか?