UITableView中的声明失败configureCellForDisplay:forIndexPath:

我不确定错误在哪里,看过其他类似的问题。 我收到一个断言失败。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath: 

我认为这是简单的,但希望有人可以帮助。

以下是我的代码:

 #import "StockMarketViewController.h" @interface StockMarketViewController () @end @implementation StockMarketViewController @synthesize ShareNameText, ShareValueText, AmountText; @synthesize shares, shareValues; - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; { return [shares count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; NSString *currentValue = [shareValues objectAtIndex:[indexPath row]]; [[cell textLabel]setText:currentValue]; return cell; } 

你从来没有创build一个单元格,你只是尝试重用一个出队单元格。 但是你从来没有创造过一个,没有。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { static NSString *cellIdentifier = @"cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; } NSString *currentValue = [shareValues objectAtIndex:[indexPath row]]; [[cell textLabel]setText:currentValue]; return cell; } 

或尝试(仅iOS 6+)

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { static NSString *cellIdentifier = @"cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; NSString *currentValue = [shareValues objectAtIndex:[indexPath row]]; [[cell textLabel]setText:currentValue]; return cell; } 

来自UITableView.h

 - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; // Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one. - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0); // newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered 

-dequeueReusableCellWithIdentifier:将始终需要检查,如果一个单元格被返回,while
-dequeueReusableCellWithIdentifier:forIndexPath:可以实例化一个新的。

如果您还没有在Storyboard中定义带有标识符@"cell"的原型单元格,则当您试图将其出列时,将会出现断言错误。

您可以通过在原型单元格上设置Identifier属性来解决此问题(select单元格并在右侧面板中设置该属性)。

我做的一个非常愚蠢的错误是

我没有把UITableViewDelegate,UITableViewDataSource的控制器类名称之后像我的类代码是类TagsViewController:UIViewController

它应该有类TagsViewController:UIViewController,UITableViewDelegate,UITableViewDataSource

可能是因为这个所有其他的代码是好的你面临的其中一个。

您需要在自定义TableViewCell中调用“initWithStyle”并再次初始化对象。

示例:ProductTableViewCell.m文件

 @implementation ProductTableViewCell - (void)awakeFromNib { } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; } - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { self.selectionStyle = UITableViewCellSelectionStyleNone; _titleLabel = [[UILabel alloc] initWithFrame:(CGRectMake(70, 0, 320, 60))]; [self.contentView addSubview:_titleLabel]; } return self; } 

在主要的实现文件中

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ ProductTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"productTableViewCell"]; NSDictionary *dic = nil; if (tableView == self.searchDisplayController.searchResultsTableView) { dic = [_filteredArray objectAtIndex:indexPath.row]; } else { dic = [_originalArray objectAtIndex:indexPath.row]; } cell.titleLabel.text = [dic objectForKey: @"title"]; return cell; } 

我有同样的错误,我设法find了错误。 我有一个arrays的赛段和视图标题:

 NSArray *MMTitles= [NSArray arrayWithObjects:@"MainMenu",@"viewIt",@"viewNots",@"MyProfile",@"Settings",@"Instructions",@"Help", nil]; NSArray *MMSegues=[NSArray arrayWithObjects:@"MainMenu",@"MyProfileSegue",@"viewNotSegue",@"MyProfileSegue",@"SettingsTableViewSegue",@"InstructionsViewSegue",@"HelpViewSegue", nil]; self.menuItems = [[NSArray alloc]initWithObjects:MMTitles,MMSegues, nil]; 

然后我使用这个数组作为我的表的数据源。 我收到的错误是由于事实上,我实际上没有在我的故事板中声明的HelpViewSegue实例化VC:

  vc = [mainStoryboard instantiateViewControllerWithIdentifier: [[self.menuItems objectAtIndex:1]objectAtIndex:indexPath.row]]; 

很琐碎,但是非常令人沮丧! 希望这有助于。

在下面的代码中,你写了@"cell" (用小c写),但是你必须使用@"Cell"C必须是大写)。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];