dequeueReusableCellWithIdentifier在didSelectRowAtIndexPath方法中返回nil

时间:2012-08-11 20:53:36

标签: ios tableview

我在我的项目中使用CustomTableCell。我可以看到“dequeueReusableCellWithIdentifier”在方法“cellForRowAtIndexPath”中返回一个有效的单元格,因为它应该重新加载表格。

在CustomTableCell中,我有一些我想重复使用的图像,而无需再次下载。但是每次在“didSelectRowAtIndexPath”委托方法中使用时,我都会使用“dequeueReusableCellWithIdentifier”获得“nil”。

原始表没有被销毁。该表是类对象,我可以看到它与“didSelectRowAtIndexPath”参数中收到的tableView相同。

此行为与我使用tableview的项目中的viewcontrollers一致。

我正在使用ARC。知道什么可能是错的吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这个问题有点模糊,但我相信你只是试图从“didSelectRowAtIndexPath”中访问自定义单元格。如果是这种情况,那么您应该使用:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomTableCell *myCell = (CustomTableCell*)[tableView cellForRowAtIndexPath:indexPath];
}

然后您可以自由访问自定义单元格的任何部分。

万一你好奇:

“dequeueReusableCellWithIdentifier”用于减少对象分配的数量。通过重用已经“移动”超出可见范围的表格单元格来解除分配。即如果您有一个包含1000个单元格的表格,但在任何给定时间只能看到10个单元格。将创建~10个单元并一遍又一遍地重复使用。因此,当调用dequeueReusableCellWithIdentifier时,会将其中一个单元格从当前未使用的单元格堆栈中拉出,或者如果堆栈为空则创建一个单元格。