我有一个自定义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不被接受并导致异常