dequeueReusableCellWithIdentifier不能与ARC和IOS 4一起使用

时间:2012-05-18 05:14:45

标签: iphone ios4 automatic-ref-counting

我似乎无法让dequeueReusableCellWithIdentifier工作。

我需要为IOS 4构建一个项目,所以我不能使用故事板,但我正在使用ARC。

假设我有2个部分,每个部分有1行。

查看下面的代码,我使用强属性来传递所有权,因为ARC会插入“自动释放”代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *cellIdentifier = @"TableCellIdentifier";

     MainTableCell *cell = (MainTableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

     if (cell == nil) 
     {
          self.retainedCell = [[MainTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
     }

     [self configureCell:cell atIndexPath:indexPath];

     return cell;
}

但是,对于每一行,每次调用函数时,单元格总是为nil(因此会分配新的MainTableCell)。该细胞永远不会被重复使用。

除了我以编程方式调用tableView:cellForRowAtIndexPath:之外,这不会是一个问题,这意味着我每次都会获得一个新分配的单元格,而不是现有的单元格。

我能看到的唯一方法是将单元格添加到NSMutableArray。

现在dequeueReusableCellWithIdentifier是否遗漏了一些东西?

谢谢!

修改 我正在使用下面的代码来获取单元格。如上所述,它正在创建一个新单元,而不是重新使用应该已经制作+保留的单元。 我不需要为所有行调用reloadData,只需更改一个特定的行。

MainTableCell *cell = (MainTableCell *)[self tableView:self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
[self configureCell:cell atIndexPath:indexPath];

1 个答案:

答案 0 :(得分:3)

您恰好要对MainTableCell进行排队,然后继续检查它是否为零,此时您使用完全不同的var来分配表格单元格。有没有搞错?试试这个:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"TableCellIdentifier";
    MainTableCell *cell = (MainTableCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) 
    {
        cell = [[MainTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    [self configureCell:cell atIndexPath:indexPath];

    return cell;
}