我在xcode4中使用iphone模拟器获得此异常:
Terminating app due to uncaught exception 'NSInternalInconsistencyException'
如果在cellForRowAtIndex方法中没有返回任何对象(返回0),似乎会导致这种情况。但是我已经准备好返回牢房了。
任何人都可以看到可能导致此错误的原因吗?这是一系列截图:
控制器配置:
原型细胞
attentionCell:
故事板:
完全错误:
**Assertion failure in -[UITableView
_createPreparedCellForGlobalRow:withIndexPath:],
/SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:6061
2012-07-30 14:34:16.660 Simple Storyboard[263:f803] Terminating app due
to uncaught exception 'NSInternalInconsistencyException',
reason: 'UITableView dataSource must return a cell from
tableView:cellForRowAtIndexPath:'**
以下是代码:
#import "LWWBidTaskListController.h"
@interface LWWBidTaskListController ()
@property (strong, nonatomic)NSArray *tasks;
@end
@implementation LWWBidTaskListController
@synthesize tasks;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.tasks = [NSArray arrayWithObjects: @"Walk the dog", @"URGENT:Buy milk", @"Clean hidden lair", @"Invent miniature dolphins", @"Find new henchmen", @"Get revenge on do-gooder heroes", @"URGENT: Fold laundry", @"Hold entire hold hostage", @"Manicure", nil];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.tasks = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
//#warning Potentially incomplete method implementation.
// Return the number of sections.
//return 0;
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//#warning Incomplete method implementation.
// Return the number of rows in the section.
//return 0;
return [tasks count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath//populates each cell
{
//static NSString *CellIdentifier = @"Cell";
//UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSString *identifier = nil;
NSString *task = [self.tasks objectAtIndex:indexPath.row];
NSRange urgentRange = [task rangeOfString:@"URGENT"];
if (urgentRange.location == NSNotFound)
{
identifier = @"plainCell";
}
else
{
identifier = @"attentionCell";
}
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
// Configure the cell...
UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
cellLabel.text = task;
return cell;
}
该错误意味着什么,我该如何解决?
答案 0 :(得分:2)
看起来好像你从未创建过一个单元格。如果你从未分配和初始化一个单元格,那么就没有任何一个单元格出列。 在//配置单元格..行之前,您需要检查可重用单元格是否已出列,如果没有,请创建一个如下:
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
// Configure common elements here
}
// Now go on to configure specific elements for this row
在使用故事板时,您可能没有正确设置原型单元属性。标识符必须与上述方法中的标识符相匹配。
请参阅此图片,了解原型单元属性Prototype cell setup的位置。它来自本教程,也可以帮助您Ray Wenderlich and Storyboards
答案 1 :(得分:1)
我想你的第二个原型单元必须成为故事板中tableView的一部分,现在它只是同一场景的一部分 - 这可能就是为什么你没有了。
无论如何都试着:
NSLog(@"current cell: %@ -> %@", identifier, cell);
并检查dequeueReusableCellWithIdentifier:
正在返回的内容。
只需将attentionCell
拖放到表格视图中即可