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
一个子类。
任何想法,为什么这是行不通的?
任何方式(代码行)知道什么是一个单元格的标识符?
谢谢
编辑:我的界面生成器的屏幕截图。
编辑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)