0

我很难理解 cellForRowAtIndexPath 中的以下代码块:

NSString *uniqueIdentifier = @"SliderCellWithComments";

SliderCellWithComment *cell = nil;

cell = (SliderCellWithComment*) [tableView dequeueReusableCellWithIdentifier:uniqueIdentifier];

if(!cell)
{

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"SliderCellWithComment" owner:nil options:nil];
    for (id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[SliderCellWithComment class]])
        {
            cell = (SliderCellWithComment*)currentObject;
            cell.delegationListener = self; //important!!
            cell.indexPath = [indexPath copy]; //important!!

            break;
        }
    }

    [cell setNameLabelText:@"Days to display:"];
    .
    .
    .

我从 StackOverflow 获得了这段代码,它运行良好,直到我尝试在 iOS 5.1 上运行它,它崩溃并出现错误:'NSInternalInconsistencyException',原因:'NIB 数据无效。

但我对代码的不理解是它似乎并没有真正重用任何东西。

例如:为什么这段代码两次为“cell”赋值?

  1. cell=(SliderCellWithComment*)[tableView dequeueReusableCellWithIdentifier:uniqueIdentifier];

  2. 单元格 = (SliderCellWithComment*)currentObject;

如果 2 执行,据我说,没有任何东西被重新使用,因为单元格被分配了一个来自新笔尖的值。

我也没有真正使用数组,为什么下面的代码会呈现空白单元格:

static NSString *CellIdentifier = @"SliderCellWithComments";
SliderCellWithComment *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
{
    cell = [[SliderCellWithComment alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

[cell setNameLabelText:@"Days to display:"];
cell.delegationListener = self; //important!!
cell.indexPath = [indexPath copy]; //important!!
.
.
.
4

1 回答 1

0

实际上代码是重用单元格。询问[tableView dequeueReusableCellWithIdentifier:uniqueIdentifier];表视图是否可以找到具有该标识符的单元格可以重用,如果有一个可以重用的单元格,那么该单元格将不会为 nil 并且不会执行来自表的代码,如果表没有t 找到一个单元格,然后将执行该块,并从 xib 文件创建一个新的自定义单元格。if(!cell){}if(!cell){}

我并没有真正使用数组

您所拥有的(该数组)是从 xib 文件加载自定义视图的默认方式。

为什么以下代码会呈现空白单元格

因为在那段代码中,您正在从 UITableViewCell 调用一个方法,该方法可能未在您的自定义单元格中实现,因为自定义单元格初始化将使用 xib 文件完成(第一个引用中提到的数组:)

于 2013-05-10T21:08:31.433 回答