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"];