我正在尝试使用自定义UITableViewCell
构建我的应用程序。这是我的UIViewController
中的代码,它将viewCell
添加到表中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"------- Tableview --------");
static NSString *myIdentifier = @"MyIdentifier";
MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:myIdentifier];
if(cell == nil) {
NSArray *cellView = [[NSBundle mainBundle] loadNibNamed:@"tblCellView" owner:self options:nil];
cell = [cellView objectAtIndex:0];
}
[cell setLabelText:[NSString stringWithFormat:@"indexpath.row: %d", indexPath.row]];
//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:myIdentifier] autorelease];
cell.textLabel.text = @"bös";
return cell;
}
如果我取消注释“return cell”上面的行,它会返回一个没有任何错误的常规UITableViewCell
,但是一旦我尝试实现我的自定义单元格,它就会崩溃并出现此错误:
------- Tableview -------- 2010-04-23 11:17:33.163高尔夫[26935:40b] *断言失败 - [UITableView _createPreparedCellForGlobalRow:withIndexPath:],/ SourceCache / UIKit_Sim / UIKit-984.38 / UITableView.m:4709 2010-04-23 11:17:33.164高尔夫[26935:40b] * 由于未被捕获而终止应用程序 异常'NSInternalInconsistencyException',原因:'UITableView dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath:' 2010-04-23 11:17:33.165高尔夫[26935:40b]筹码:(
...
我已将.xib文件配置为具有正确插座的文件。并且UITableViewCell的标识符对应于尝试从NSBundle加载的名称
答案 0 :(得分:1)
我无法看到声明tblCell
的位置,这可能是您的代码中的许多问题之一。首先,你需要做一些事情:
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyTableCell *)[nib objectAtIndex:0];
}
您只是加载笔尖但从未从中提取单元格。
- 更新 -
如果IB中的自定义单元格有任何错误或绑定错误,您还应检查自定义单元格。
答案 1 :(得分:1)
您还应确保将Interface Builder中的自定义类类型设置为相应的类名(在您的示例中为MyTableCell
),否则强制转换也不起作用。
答案 2 :(得分:1)
我创建了这个定义以帮助
#define LoadViewNib(__NIBNAME__) [[[NSBundle mainBundle] loadNibNamed:__NIBNAME__ owner:self options:nil] objectAtIndex:0]
使用,你只能这样做
if(cell == nil) {
cell = LoadViewNib(@"MyCellNibName");
}
答案 3 :(得分:0)
我认为loadNibNamed:
nethod由于某种原因返回nil。因此产生的细胞对象也是如此。
答案 4 :(得分:0)
参考:A Closer Look at Table-View Cells
如果要加载自己的自定义单元格,那么“为此过程的编程部分设置的一个重要属性是每个对象的标记属性。在”属性“窗格的”视图“部分中找到此属性并分配每个对象一个唯一的整数。“
现在检索您的标签 (我想你将tag = 1分配给标签)
UILabel *cellLabel = (UILabel *)[cell viewWithTag:1];
cellLabel.text = @"Your text goes here"