注册了NIB,当我使用dequeueReusableCellWithIdentifier时仍然会出现断言错误



我有一个自定义UITableViewCell类,我想用它来创建自定义表单元格。我创建了自定义表单元格的xib及其头文件和实现文件,所有这些文件都称为RTRepairOrderTableCell.m/.h/.xib

我的问题是,即使我在.xib文件中将表单元格的重用标识符设置为RTRepairOrderTableCell,并在表视图控制器中注册了xib,但当它试图出列或创建新的单元格以供使用时,我仍然会遇到断言错误。

在我的视图(表)控制器内部,我有以下内容:

- (void)viewDidLoad
{
    [super viewDidLoad];
    //Load the nib file
    UINib *nib = [UINib nibWithNibName:@"RTRepairOrderTableCell"
                                bundle:nil];
    // Register this Nib, which contains the cell
    [self.tableView registerNib:nib
         forCellReuseIdentifier:@"RTRepairOrderTableCell"];    
}

这里没有错误,它很好地完成了viewDidLoad

在我的cellForRowAtIndexPath内部,我有以下内容:

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

根据我看过的每一个教程,只要我在xib文件中正确设置了重用标识符,并且我在视图控制器类中的viewDidLoad中注册了该xib,就会显示表单元格,那么这应该是有效的,所以我不知道为什么我会得到

*** Assertion failure in -[UITableView _dequeueReusableViewOfType:withIdentifier:], /SourceCache/UIKit/UIKit-2935.138/UITableView.m:5413

原来我在nib文件中有几个孤立的UIImage对象,但在UITableViewCell区域之外,所以它抛出了错误,说UITableViewCell需要是最顶层的视图。

我面对这个问题,它让我抓狂。但这是我的错。我在Nib文件中设置了标识符@"Abc",我正在用其他一些标识符@"Xyz"注册同一个Nib文件。从笔尖上删除了标识符,将该部分留空,它就像冠军一样工作。:)

这可能是一种罕见的情况,但由于一些草率的复制意大利面,我的表中使用的两个不同的UITableViewCell自定义类在Xib中指定了完全相同的标识符。

在属性检查器中将其中一个单元格切换为具有不同的标识符,修复了我的断言失败。

检查您的.xib中是否没有主布局之外的UI组件:

不接受标签

在本例中,Label不被接受并导致异常

最新更新