【问题标题】:UITableViewController with custom UITableViewCell带有自定义 UITableViewCell 的 UITableViewController
【发布时间】:2012-03-02 20:33:41
【问题描述】:

我很好奇为什么在控制器上自定义表格视图单元格时会收到 SIGABRT 错误。 Cell 是在UITableViewCell 类中创建的,我可以看到所有内容都已链接。 UITableViewController 不是 rootController,而是另一个 UITableViewController 的根控制器。所以 RootView -> TableViewCont -> 这个 TableViewCont。

错误在cellForRowAtIndexPath函数中:

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

CellTest *cell = (CellTest *)
                [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *topLevelObjects = [[NSBundle mainBundle]
                                loadNibNamed:@"CellTest" owner:self 
                                options:nil];//**error is thrown here**//
    for(id currentObject in topLevelObjects){
        if([currentObject isKindOfClass:[UITableViewCell class]]){
            cell = (CellTest *) currentObject;
            break;
        }
    }
}

// Configure the cell...
cell.cellTitle.text = @"Test";
cell.cellDescription.text = @"little detail";

return cell;
}

这是gdb日志中的错误:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<DemoViews 0x6b16ce0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key cellDescription.

【问题讨论】:

  • 您确定您已包含所有内容吗?尝试清理项目。我的应用程序中有相同的代码,它的工作就像一个魅力......
  • 它说一切都很干净。具有表的文件只是一个不是根的 UITableViewController 并且 Cell 代码只是一个 UITableViewCell 是否会有所不同。我是否必须在 UITableViewController 的 .xib 中添加任何内容
  • xib 里一定有什么奇怪的东西。 UITableViewCell 的“自定义类”是否设置正确?默认为UITableViewCell,但您可能需要它为CellTest
  • 类在CellTest.xib中设置为CellTest
  • 文件CellTest.xib的文件所有者是CellTest?它应该...

标签: ios uitableview customization


【解决方案1】:

我遇到了同样的问题,但不明白为什么要获得 SIGABRT。但是我解决了这个问题:

  1. 首先将单元格的布局放入单独的 xib。别问为什么,只要xib里有其他东西就行不通了。
  2. 现在您可以关注recipe of Apple for creating custom cells

【讨论】:

  • 这行得通。我想添加到网站上提到的单独 xib 的一件事是它是一个空的仅 xib 用户界面。另外,我不觉得苹果说清楚的一件事是我理解的部分错误,静态 NSString 是你给单元格的 id 而 loadNibName 是 xib 文件的名称。他们确实这么说在文本中,但我发现它有点令人困惑,因为当您在创建文件时将其添加到 .m 文件时,他们没有提及 nibName。所以这些是我注意到的一些事情,它们会让其他人更容易。
  • 嗯,是的,前段时间我也花了 1 天以上的时间,你真的必须注意文章中的每一个字才能让它发挥作用。很高兴你成功了。
  • @MrTJ 哇,我很高兴我找到了这个链接。小问题:如果您在同一个 tableview 中有 3 个不同的自定义单元格怎么办 - 这怎么办? (所以我可以选择要使用的单元格:TVCell1、TVCell2 和 TVCell3)
  • 如果您同时需要所有三个单元格,我想您应该创建三个连接到 xib 的实例变量。如果你在不同的时间需要它们,你可以释放那些你暂时不需要的,或者将它们分成三个不同的文件所有者。但是,如果您必须创建如此复杂的表并且您没有特别的理由使用 xibs,我强烈建议您查看 segues:使用它创建自定义表要容易得多。
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多