无法从其dataSource获取单元格 - 故事板和代码

时间:2017-04-05 14:50:48

标签: ios objective-c uitableview

我在我的Storyboard中添加了一个TableViewController,并将其类型更改为继承UITableViewController的自定义类。  我还从故事板中添加了一些单元格。 (不是自定义的,基本的UITableViewCells)  现在我想以编程方式修改这些单元格(例如有条件地添加公开指示符)。所以我让我的类采用了UITableViewDelegate,但是当我尝试以编程方式修改我的单元格的文本时,我收到了这个错误:

  

NSInternalInconsistencyException:无法从其dataSource获取单元格

以下是代码:

 @interface MyTableViewController () <UITableViewDelegate>
 @end

 @implementation MyTableViewController

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
     cell.textLabel.text = @"test";
     return cell;
 }

 @end

在我的Storyboard中,在Referencing Outlets中,我正确地将dataSource和delegate链接到表视图。  我在这里错过了什么?谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

您应该使用-dequeueReusableCellWithIdentifier:代替[tableView cellForRowAtIndexPath:indexPath]; 但首先,如果您使用的是storyboard或xib,则必须在那里设置reuseIdentifier并检查是否在[tableView dequeueReusableCellWithIdentifier:@"<your cell id>"];中使用相同的reuseIdentifier,如果您不使用IB,则应通过[self.tableView registerClass:forCellReuseIdentifier:]注册您的单元格

但要注意有两种不同的方法

1。- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;

2。- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;

如果你在1st中设置了未注册的reuseIdentifier,那么你将获得一个单元格== nill,在第二个中你会得到一个崩溃 万一你得到它,你可以使用:

创建和注册你的新单元格
 if (cell == nil)
    {
        cell = [UITableViewCell initWithStyle:UITableViewCellStyleDefault reuseIdentifier:<your cell id>];
    }

答案 1 :(得分:-1)

static NSString *simpleTableIdentifier = @"TxtTableViewCell";
TxtTableViewCell *cell = (TxtTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TxtTableViewCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}