2010-02-08 93 views
43

其实我没有看到我的错误:UITableView的数据源必须的tableView返回细胞:的cellForRowAtIndexPath:异常

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

我到底做错了什么?我检查了两次..但没有看到错误。

感谢您的帮助!

回答

66

你正在返回friendCell,它很可能是零。

您的代码看起来不错,因此请确保您的Interface Builder文件设置正确。在FriendTableViewCell.xib中,确保文件的所有者是您的表视图控制器,并且您正确设置单元格为friendCell的出口(我假设它是一个UITableViewCell)。

+1

谢谢,再次签入后,我发现在Interface Builder中缺少插座连接! – phx 2010-02-09 17:39:26

+1

谢谢,你的回答正是我所需要的。我改变了视图控制器类的名称,打破了与IB的连接,而没有考虑到它。没有更多改变的名字,因为我不喜欢它们! – 2010-11-23 09:35:57

+0

很好的答案,通常问题是关于返回一个零单元格! – Fattie 2013-11-05 16:14:39

2

您正在创建FriendTableViewCell,然后忽略它并将其设置为(大概)等于名为friendCell的实例变量。

我假设你希望在调用loadNibNamed方法时设置friendCell。它显然没有被设置。

所以你有这个代码的两个问题。首先,不要分配一个单元两次。

cell = [[[FriendTableViewCell .... 
[[NSBundle mainBundle ..... 
cell = friendCell; 

很显然,如果你用第二次调用来赋值给单元格,创建一个新的单元格并将其分配给单元格是无用的。

二,friendCell大概为零。确保NIB安装正确并且插座指向正确的位置。

+0

感谢您的帮助! friendCell是我的Outlet,那么如何正确设置? – phx 2010-02-08 19:56:27

0

看看这里:Loading TableViewCell from NIB

这是苹果对这个确切的主题文件。

//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中加载单元格。将单元格实例设置为您的笔尖对象,然后将笔尖对象设置为零。

阅读我已链接的其他文档,以了解如何在单元格内访问子视图。

2

我知道这是一个旧的帖子,但是,我刚刚遇到这个错误,我发现它非常奇怪,因为该应用程序正在测试,所以没有新的构建几天,它做到了这一点,我所做的只是重新启动电话,它解决了它。

33

对于我来说,它的工作这样做:

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

UPDATE
将在下面的方法上面的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

只要把编辑tableViewCell

0

别忘了设置Interface Builder中的。

0

利用这一点,

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:kCellID]; 

我救了几个小时,只是这行。

0

,让您的NIB /故事板文件,确保您的重用标识符不管你叫CellIdentifier

static NSString *CellIdentifier = @"Cell"; 
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); 
+0

在我的情况下,我调用函数来加载表UITableViewCell注册前的数据,upvote作为你的答案帮助我解决这个问题 – iphonemaclover 2016-08-04 10:28:54

相关问题