37

我的工作是关于`UITableView。每次我运行我的项目时,都会出现这个错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Cell1 - must register a nib or a class for the identifier or connect a prototype cell in a storyboard

我在故事板和代码中检查了一百次我的单元格标识符是相同的。代码(来自的默认代码UITableViewController):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *CellIdentifier = @"Cell1";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    // Configure the cell...

    return cell;
}

表格视图单元格属性的图片: 在此处输入图像描述

UITableViewCell我为我的单元创建并实现了一个子类。

知道为什么这不起作用吗?

任何方式(代码行)知道什么是单元格的标识符?

谢谢

编辑:我的界面生成器的屏幕截图。

国际文凭组织

编辑 2:customCell.h 的文本

#import <UIKit/UIKit.h>

@interface customCell : UITableViewCell

@end

运行项目时出现新错误:

[<choixActiviteViewController 0x7591ac0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Cell1.

choixActiviteViewController 是 UITableViewController 的子类,是 Choix Activite View Controller 的自定义类。

4

11 回答 11

80

代替:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

尝试:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

如果这不起作用,还请添加:

  if (cell == nil) {
    cell = [[customCell alloc] init];
}
于 2013-09-29T23:25:01.987 回答
25

好的,您的问题是您使用的是Static cells, 而不是Prototype cells. 只需更改您的 UITableView 内容类型。

原型细胞选项

于 2013-09-29T23:40:19.127 回答
14

好的,我的项目终于成功了。关于我已删除的内容出现了一些错误,我再也找不到了。

我刚刚删除了每个 TableViewCell 我必须创建一个UITableViewCell具有以下属性的新唯一:

类:customCell

风格:基本(但也适用于自定义)

标识符:单元格1

感谢您的帮助 ssantos、Abdullah Shafique 和 bilobatum。

于 2013-09-30T00:13:04.790 回答
2

如果您的表格单元格是 UITableViewCell 的子类,那么您没有使用“基本”样式的单元格。将属性检查器中的样式设置更改为自定义。

此外,确保表格单元的身份检查器中的类设置为您的自定义表格单元子类。

于 2013-09-29T23:25:25.630 回答
2

我想你正在使用静态单元格。如果您有意识地这样做 - 只需从 .m 文件中删除 thous 方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
}
于 2014-09-14T15:57:27.730 回答
1

尝试使用customCell类而不是UITableViewCell类。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell1";
customCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

return cell;
}
于 2014-03-02T06:00:31.240 回答
1

如果您有意使用静态 UITableViewCells,那么您不必实现正常的 UITableView 填充方法(numberOfSectionsInTableView:, tableView:numberOfRowsInSection:, tableView:cellForRowAtIndexPath:).
UITableView 将自动从情节提要中定义的单元格填充。您最终会使用 tableView:cellForRowAtIndexPath: 来格式化单元格中的数据。您使用 [super tableView:cellForRowAtIndexPath:] 来获取 tableViewCell,然后使用 ReuseIdentifier、标签或 indexPath 将单元格与随之而来的数据相匹配。

于 2014-03-02T05:19:18.100 回答
1

这个问题的原因从异常中就很清楚了:

这个问题的一个解决方案是为标识符注册一个类

在 Swift 中,这可以按如下方式完成

tableView.registerClass(UITableViewCell.classForKeyedArchiver(), forCellReuseIdentifier: "your_reuse_identifier")
于 2016-06-19T05:35:22.033 回答
0

In my case the Storyboard where I had defined the missing UITableViewCell was localised.

于 2017-02-03T14:03:06.570 回答
-1

Comment out all of the code in application:didFinishLaunchingWithOptions(AppDelegate) but remain return YES, and try it again.

于 2015-02-02T01:44:21.197 回答
-1

在展示具有来自另一个视图控制器的自定义单元格的 UITableViewController 时,我遇到了这个问题。作为一种解决方法,我从情节提要中对其进行了实例化,从而解决了问题。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "YourTableViewController")
self.present(controller, animated: true, completion: nil)
于 2017-07-04T03:37:04.147 回答