Xcode无法出队带标识符的单元格

我的工作是关于`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; } 

表格单元格属性的图片: 在这里输入图像说明

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

任何想法,为什么这是行不通的?

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

谢谢

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

IB

编辑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的自定义类。

代替:

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

尝试:

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

如果这不起作用的话,还要加上:

  if (cell == nil) { cell = [[customCell alloc] init]; } 

好的,你的问题是你正在使用Static cells ,而不是Prototype cells 。 只要改变你的UITableView内容types。

原型单元格选项

好的,我的项目终于有效了。 一些错误出现在我已经删除的东西,我找不到了。

我刚刚删除了每个TableViewCell我不得不创build一个新的独特的UITableViewCell具有以下属性:

class:customCell

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

标识符:Cell1

谢谢你的帮助ssantos,阿卜杜拉Shafique和bilobatum。

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

另外,请确保表格单元的“标识”检查器中的“类”被设置为您的自定义表格单元格子类。

我想你使用的是静态单元格。 如果你有意识地这么做 – 只要从你的.m文件中删除这些方法:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { } 

尝试使用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; } 

如果您有意使用静态UITableViewCells,那么您不必实现普通的UITableView填充方法(numberOfSectionsInTableView:, tableView:numberOfRowsInSection:, tableView:cellForRowAtIndexPath:).
UITableView将自动从您的故事板中定义的单元格中填充。 你最终使用tableView:cellForRowAtIndexPath:来格式化单元格中的数据。 您可以使用[super tableView:cellForRowAtIndexPath:]来获取tableViewCell,然后使用ReuseIdentifier,tags或indexPath来匹配单元格和它的数据。

这个问题的原因是非常明显的例外:

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

在Swift中,这可以按照以下步骤完成

 tableView.registerClass(UITableViewCell.classForKeyedArchiver(), forCellReuseIdentifier: "your_reuse_identifier") 

在我的情况下,我已经定义了缺less的UITableViewCell故事板本地化。

注释掉应用程序中的所有代码:didFinishLaunchingWithOptions(AppDelegate),但仍然返回YES,然后重试。

我提出从另一个viewcontroller具有自定义单元格的UITableViewController时,我正面临此问题。 作为一个解决方法,我从故事板实例化,并解决了这个问题。

 let storyboard = UIStoryboard(name: "Main", bundle: nil) let controller = storyboard.instantiateViewController(withIdentifier: "YourTableViewController") self.present(controller, animated: true, completion: nil)