无效的注册标识符(CELLNAME)nib必须包含一个顶级对象,它必须是一个UITableViewCell实例

对不起,长的标题,但我想从谷歌search清楚地看到它。 此外,这与其他许多类似的问题有所不同,因为它没有指定一个“空”标识符,而是一个实际存在的标识符。

本质上,当你试图使用表视图控制器中的一个单元格导航到另一个视图(无论这个视图可能是什么)时,就会出现这个问题。

大多数人在通过“待办事项列表”上的苹果教程之后会遇到这个问题,并且期望这些小区不pipe其目的如何运行。 这个问题对于大多数人来说可能是简单的,但对于一个初学者来说,这个问题相当困难,我花了大约3个小时。

基本上这个错误是:

invalid nib registered for identifier (prototypeCell) - nib must contain exactly one top level object which must be a UITableViewCell instance 

无论您的细胞被称为“原型细胞”,哪儿都可以。 这是在应用程序启动时立即发生的exception。

我有同样的问题,但我没有使用故事板,问题出现在蓝色。

我发现解决scheme是在tableview单元格文件中。 我已经添加了一个uibutton,但它错误地添加到了单元格的边界之外。 这意味着它在uview中几乎就像一个额外的视图。

一旦我find并删除了这个额外的视图,问题立即消失。

如果你有这个错误,检查uitableviewcell的错误添加额外的意见和对象

simon_smiley的答案指出了我的正确方向,但还需要更多的反复试验,以便得出以下解决scheme:

该问题不仅发生在其他顶级UIView对象上,而且还发生在手势识别器上 。 因此,请确保不要在失败的XIB文件中使用任何手势识别器,而是可以将其设置为代码。

例如,你可以在awakeFromNib执行,如接受的答案评论中的vahotm所指出的那样。

我有同样的问题! 而在我的情况下,自定义单元格是UIView的子类而不是UITableViewCell。 所以用UITableViewCellreplaceUIView修复了这个问题!

问题是故事板中有多个单元格具有相同的名称。 例如对于单个表视图,有多个单元具有相同的标识符。 在我的情况下,我有三个细胞,都被称为“原型细胞”。

修复其实很简单。 对于每个单元格,将其命名为最后一个单元格编号。 这个单元格编号必须与以后的indexPath.row匹配,所以基本上从0开始。

例如:

 prototypeCell0 prototypeCell1 prototypeCell2 

然后,进入负责控制器的类,并find该function

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

然后replace代码:

 static NSString *CellIdentifier = @"PrototypeCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

随着代码:

 static NSString *CellIdentifier = @"ListPrototypeCell"; NSString* num = [NSString stringWithFormat:@"%d", indexPath.row]; NSString* actual = [CellIdentifier stringByAppendingString:num]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:actual forIndexPath:indexPath]; 

其他一切都可以保持不变。 这个代码基本上得到行号,将它添加到标识符库中,使用该string从表中获取单元格。 所以如果它响应不同的行号,它会返回一个不同的单元格。

为了澄清,我对问题的整个function如下:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"ListPrototypeCell"; NSString* num = [NSString stringWithFormat:@"%d", indexPath.row]; NSString* actual = [CellIdentifier stringByAppendingString:num]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:actual forIndexPath:indexPath]; cell.textLabel.text = self.content[indexPath.row]; return cell; } 

祝你好运!

此外,这是我的第一个答案/问题组合,所以我真的不知道如何处理它,所以如果我做错了什么,请告诉我和/或改变它。 谢谢!

有时候你使用故事板,里面有collectionView和collectionView。 之后,你决定简化你的故事板,并将细胞分成另一个笔尖。 您创build空的笔尖, Ctrl+C从故事板 – > Ctrl+V到笔尖。

一切看起来都很好,但是由于未捕获的exception“NSInternalInconsistencyException”,你将终止应用程序,原因:'为标识符注册了无效的nib(PrettyCollectionViewCell) – nib必须包含一个顶级对象,它必须是一个UICollectionReusableView实例'

Ansver:不要这样做。 在我清理了笔尖并添加了所有元素之后,我已经在Storyboard中进行了修复。

看起来像xCode IB的Bug – 版本7.3.1(7D1014)

为了google的缘故,我会放下我的愚蠢解决scheme…

这是我个人愚蠢的错误 – 当我为我的表视图创build一个新的自定义单元格时,我到了我的项目的顶层目录 – >添加新文件 – >,并在OS X部分下创build了空文件types,而不是iOS部分。

希望大多数人都有上述的其他问题,因为它不那么令人尴尬:P

同样的问题,因为我拖放一个UITapGestureRecognizer的子视图的ContentView 。 只要删除它。

在我的情况下,我已经添加了UITableViewHeaderFooterView子类和XIB不同的目标,而不是实际的目标。

确保它在运行目标。

在这里输入图像说明

我有这个问题,终于发现,我已经创build了UITableViewCell子类而不是CollectionViewCell子类。 那天晚上,我累了,哈哈。 修正了这个问题