-1

当我尝试加载自定义 UITableViewCell 应用程序崩溃时。我以前做过很多次,这次我用同样的方法。导致崩溃的部分代码被注释(//这部分导致崩溃):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    static NSString *CellIdentifier = @"CustomTableCell";

    CustomTableCell *cell = (CustomTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

       // This part is causing crash
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:nil options:nil];

        cell = [topLevelObjects objectAtIndex:0];

    }

     return cell;

}

有 CustomTableCell.h、CustomTableCell.m 和 CustomTableCell.xib。

CellIdentifier 是 CustomTableCell 并且 nib 名称没有空格问题。

错误截图: 在此处输入图像描述

什么可能是崩溃的原因?

4

5 回答 5

1

您是否在课堂上检查了自定义单元的连接而不是文件的所有者。? 在此处输入图像描述

于 2013-03-15T12:43:55.073 回答
0

试试下面的代码:

#import "customCell.h"

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   // Configure the cell.
   static NSString *CustomCellIdentifier = @"customCell";
   customCell *cell = (customCell *)[tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier];

   if (cell == nil)
   {
      NSArray *nib;
      nib = [[NSBundle mainBundle] loadNibNamed:@"customCell" owner:self options:nil];

      for (id oneObject in nib)
          if ([oneObject isKindOfClass:[customCell class]])
             cell = (customCell *)oneObject;

      cell.lbl.text = @"Hello";
   }
   return cell;
}

希望它会帮助你。

于 2013-03-15T12:17:34.553 回答
0

试试这个。。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   CustomTableCell *cell;
   cell = (CustomTableCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomTableCell"];

   NSArray *nib;
   for (UIControl *subview in cell.contentView.subviews) {
      [subview removeFromSuperview];
   }

   if(cell == nil)
   {
       nib = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:self options:nil];

       for(id oneobject in nib)
       {
          if([oneobject isKindOfClass:[CustomTableCell class]])
          {
             cell = (CustomTableCell *)oneobject;
          }
       }
   }
}

希望能帮助到你..

于 2013-03-15T12:22:22.600 回答
0

到目前为止,代码看起来还不错。可能的问题是,您没有将 xib 链接到编辑器中的自定义类。如果是这样,您可能会遇到问题,即某些链接的 Outlets 不存在(或者,这取决于错误)。

您可以在“自定义类”下的编辑器中链接您自定义的表格视图单元格。通过单击自定义单元格上的 xib 文件编辑器来执行此操作(在左侧部分中,您可以找到“对象”部分,在此下方,您应该找到表格视图单元格)。如果您打开了属性编辑器,请单击第三个选项卡(这样您就可以看到,您可以在其中设置自定义类。输入您的类的名称(在您的情况下,它的“CustomTableCell”)。单击右边的右箭头对输入的类进行验证,如果您的自定义类存在。重新编译(可选 make a clean),它应该可以正常工作。

于 2013-03-15T12:36:51.763 回答
0

解决了。

我为自定义单元创建了新的 xib 文件,现在一切正常。

于 2013-03-15T12:42:52.040 回答