我实际上没有看到我的错误:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
FriendTableViewCell *cell = (FriendTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[FriendTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
[[NSBundle mainBundle] loadNibNamed:@"FriendTableViewCell" owner:self options:nil];
cell = friendCell;
}
cell.lblNickname.text = @"Tester";
return cell;
}
我做错了什么?我检查了两次..但没有看到错误。
感谢您的帮助!
答案 0 :(得分:66)
你回来了朋友凯尔,而且很可能是零。
您的代码看起来很好,因此请确保您正确设置了Interface Builder文件。在FriendTableViewCell.xib中,确保文件所有者是您的表视图控制器,并且您正确地将单元格设置为friendCell的出口(我假设它是一个UITableViewCell)。
答案 1 :(得分:33)
对我来说,它的工作原理是:
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
<强>更新强>
将上述代码放在以下方法中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
只需将 BEFORE 编辑为tableViewCell
即可答案 2 :(得分:2)
您正在创建FriendTableViewCell
,然后忽略它并将其设置为(大概)名为friendCell的实例变量。
我假设您希望在调用loadNibNamed方法时设置friendCell。它显然没有被设定。
所以你对这段代码有两个问题。首先,不要两次分配一个单元格。
cell = [[[FriendTableViewCell ....
[[NSBundle mainBundle .....
cell = friendCell;
显然,如果你在第二次调用指向单元格时覆盖它,那么创建一个新单元并将其分配给单元格是没用的。
其次,friendCell可能是零。确保NIB设置正确并且出口指向正确的位置。
答案 3 :(得分:2)
我知道这是一个旧帖子,但是,我刚刚遇到这个错误,我发现它非常奇怪,因为应用程序正在测试所以没有新的构建几天,它做到了这一点,我所做的只是重启电话,它解决了它。
答案 4 :(得分:1)
我发现在初始化表视图之前尝试创建UITableViewCell时出现了这个问题:
在创建tableView之前注册该类会导致错误,将其置于修复错误之后。
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:bCellIdentifier];
tableView = [[UITableView alloc] initWithFrame:CGRectZero];
tableView.delegate = self;
tableView.dataSource = self;
[self addSubview:tableView];
tableView.keepInsets.equal = KeepRequired(0);
答案 5 :(得分:0)
请看这里:Loading TableViewCell from NIB
这是Apple针对此主题的文档。
//This is assuming you have tvCell in your .h file as a property and IBOutlet
//like so:
TableViewController.h
@property(nonatomic,retain) IBOutlet UITableViewCell *tvCell;
//Data Source Method...
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:self options:nil];
cell = tvCell;
self.tvCell = nil;
使用loadNibNamed:owner:options方法在nib中加载单元格。将单元格实例设置为nib对象,然后将nib对象设置为nil。
阅读我已链接的其他文档,了解如何访问单元格内的子视图。
答案 6 :(得分:0)
不要忘记在Interface Builder中设置cell identifier
。
答案 7 :(得分:0)
使用此,
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:kCellID];
我只用这几行就节省了几个小时。
答案 8 :(得分:0)
确保原型单元格的NIB / Storyboard文件中的重用标识符与您称为CellIdentifier的任何内容相匹配
static NSString *CellIdentifier = @"Cell";