dequeueReusableCellWithIdentifier不起作用

时间:2012-08-31 22:36:49

标签: ios cocoa-touch ipad

我想在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开始重用单元格,但在此之前,我永远不会创建一个新的。 任何线索为什么这种奇怪的行为???

2 个答案:

答案 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:中包含问题中的代码,而不是像现在一样覆盖该方法。