0

我在使用 iphone 模拟器的 xcode4 中得到了这个异常:

Terminating app due to uncaught exception 'NSInternalInconsistencyException'

如果您在 cellForRowAtIndex 方法中没有返回任何对象(返回 0),这似乎是造成的。但我已经准备好归还牢房了。

谁能看到可能导致此错误的原因?这是一堆截图:

控制器配置: 我的控制器配置

原型细胞 原型单元 1

注意单元: 在此处输入图像描述

故事板: 故事板的完整视图

完全错误:

**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;
}

该错误是什么意思,我该如何解决?

4

2 回答 2

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 和 Storyboards

于 2012-07-30T20:07:21.637 回答
1

我想你的第二个原型单元必须是故事板中 tableView 的一部分,现在它只是同一场景的一部分——可能这就是你得到 nil 的原因。

无论如何尝试:

NSLog(@"current cell: %@ -> %@", identifier, cell);

并检查dequeueReusableCellWithIdentifier:返回的内容。


只需拖放attentionCell到表格视图中 ..

于 2012-07-30T23:34:21.410 回答