UITableView的细胞在未初始化为零(UITableView cells not nil at

2019-07-29 02:00发布

我设置了我UITableView用故事板编辑器。 为了创建我的电池,我使用标准的委托方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultCell"];
        if (cell == nil)
        {
        // Do cell setup
        }
    // etc
    return cell;
}

除了当电池被出队的第一次它不是零,因为它应该是。 所以if语句中的代码永远不会执行。

人们得到这个错误时,他们再利用标识符不一致,所以我继续验证了我使用的是完全相同的重用标识符在我的故事板视图,我在我的代码做。 仍然面临的问题。 我也有在项目中的几个tableviews而且每一个都有一个唯一的标识符的重用。 仍然没有骰子。 任何人都知道什么都可能是错在这里?

Answer 1:

这不是UITableView的是如何工作的了。 读你的问题,我想你可能会感到困惑之前,以及如何工作的。 如果没有,对不起,这第一部分是刚刚审查。 :)

没有故事板电池原型

以下是如何使用的工作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    // If the tableview has an offscreen, unused cell of the right identifier
    // it will return it.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultCell"];
    if (cell == nil)
    {
        // Initial creation, nothing row specific.
    }

    // Per row setup here.

    return cell;
}

在这里,当你创建一个使用复用标识的电池,你在这里做的只是初始设置。 没有具体到特定的行/ indexPath。

当我已经把每排设置评论你有正确的标识符的细胞。 它可以是新鲜的细胞,或细胞再循环。 你负责与此相关的特定的行/ indexPath所有设置。

例如:如果你设置在一些行文字(有可能),你需要设置或设置将通过泄露到细胞不这样做的所有行,或行文本清除它。

随着故事板原型

故事板,不过, 故事板和表格视图处理初始细胞的创造 ! 这是辉煌的东西。 您可以直接在tableview中映射出你的原型中使用故事板的时候,和Cocoa Touch将做初步建立适合你。

相反,你会得到这样的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultCell"];
    // You'll always have a cell now!

    // Per row setup here.

    return cell;
}

你像以前一样有责任都是一样的每行设置,但你不应该需要编写代码来构建你最初的空单元格,内联的或者在其自己的子类。

正如伊恩下面的注意事项,你仍然可以使用老的方法。 只要确保不包括在故事板为您指定的标识符的电池原型。 视图控制器将无法建立从电池原型你的, dequeueReusableCellWithIdentifier将返回nil,你会是什么地方你面前。



文章来源: UITableView cells not nil at initialization