我在https://stackoverflow.com/search?q=UITableView+dataSource+must+return+a+cell+from+tableView%3AcellForRowAtIndexPath搜索,但我知道我需要检查单元格是否为零,但我的单元格是自定义的,我不使用xib,我使用的是storyboard.i我也选择了这个类storyboard.as http://i.stack.imgur.com/g0rRO.png
上的CustomPlaceTableViewCell代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomPlaceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//if ([cell isKindOfClass:[CustomPlaceTableViewCell class]]) { cell = (CustomPlaceTableViewCell *)cell; }
//retrieve the place info
Place *place = [self.placeDataController objectInPlaceListAtIndex:indexPath.row];
//set the cell with place info
if (place.name)
{
cell.nameLabel.text =place.name;
}
else
{
cell.nameLabel.text = @"PortAura";
}
if (place.distance)
{
cell.distanceLabel.text = place.distance;
}
else
{
cell.distanceLabel.text = @"PortAura";
}
return cell;
}
CustomPlaceTableViewCell.m
@interface CustomPlaceTableViewCell : UITableViewCell{
UILabel *nameLabel;
UILabel *distanceLabel;
UILabel *addressLabel;
}
@property (nonatomic) IBOutlet UILabel *nameLabel;
@property (nonatomic) IBOutlet UILabel *distanceLabel;
@property (nonatomic) IBOutlet UILabel *addressLabel;
@end
@implementation CustomPlaceTableViewCell
@synthesize distanceLabel,nameLabel,addressLabel;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end
当我运行我的应用程序时,它会给我:
2012-07-02 17:16:26.675 MyAura [2595:707] ***由于未捕获异常'NSInternalInconsistencyException'而终止应用程序,原因:'UITableView dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath:'
答案 0 :(得分:4)
我想你错过了tableView中的返回单元格:cellForRowAtIndexPath 试试这个
return cell;
检查或使用此NSLog(@"description = %@",[cell description]);
如果[cell description]
为null,则更改
CustomPlaceTableViewCell *cell = (CustomPlaceTableViewCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
答案 1 :(得分:2)
是的,即使您使用上述所有建议,您的代码也会崩溃。你检查过你的单元格是否真的被创建了吗?
这不是没有创建的,并且此方法实际上返回nil
值。
在代码中使用以下行是尝试使用可重用单元格,但如果没有创建单元格会怎样?
CustomPlaceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
你必须在代码之后检查:
if (cell == nil) {
cell = [[CustomPlaceTableViewCell alloc] init]; // or your custom initialization
}
在此之后,只有你的单元格不会为零,app不会崩溃。
希望这能解决您的问题
答案 2 :(得分:0)
我也遇到了同样的问题,但我解决了。
我正面临这个问题,因为我在单独的Xib文件中创建了我的talbeViewCell,并将tableview类作为File的所有者。但是,我还没有将我的单元格IBOutlet链接到我的tableview类。
因此,将我的tableviewcell Xib链接到我的tableview中创建的IBOutlet,我解决了这个问题。
您将遇到此问题,因为您在cellforRowAtIndex中创建的tableviewcell为零。
答案 3 :(得分:-1)
return cell;
在结尾处丢失
答案 4 :(得分:-1)
我首先使用:
PlaceMasterViewController *placeController = [[PlaceMasterViewController alloc]init];
[self.navigationController pushViewController:placeController animated:YES];
因为表中没有数据,或者给我错误,所以我使用了:
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle: nil];
PlaceMasterViewController *placeController = (PlaceMasterViewController*)[mainStoryboard
instantiateViewControllerWithIdentifier: @"peoplemastViewControl"];
[self.navigationController pushViewController:placeController animated:YES];
一切正常