我想在UITableview中加载大约6000 - 8000行。我使用异步调用从服务器获取数据,当我得到数据时,我调用
[tableView reloadData]
这是刷新表格视图。但由于某种原因,我的应用程序卡住并冻结。 当我调试时,我发现cellforrowatindexpath被调用6000次(在主线程上)和 dequeueReusableCellWithIdentifier始终返回null。
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath{
CDTableRowCell *cell = nil;
// Create and Resue Custom ViewCell
static NSString *CellIdentifier = @"CellIdentifier";
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// got into render/theme objec
if(cell == nil){
cell = [[CDTableRowCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
// MODIFYING CELL PROPERTIES HERE FROM AN ARRAY
// NO HTTP CALLS
}
此外,一旦我开始滚动,tableview开始重用单元格,但在此之前,我永远不会创建一个新的。 任何线索为什么这种奇怪的行为???
答案 0 :(得分:0)
尝试这样,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier =@"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
return cell;
}
答案 1 :(得分:0)
您问题中的方法不是表视图数据源方法。 datasource方法将表视图作为参数。您编写的方法可以用于从tableView本身获取单元格,而不是从数据源获取新单元格。
我不知道调用该方法的频率如何,但覆盖它几乎肯定不是你想要做的。
我猜你已经将一个uitableview子类化为自己的数据源?如果是这样,您需要在数据源方法tableView:cellForRowAtIndexPath:
中包含问题中的代码,而不是像现在一样覆盖该方法。