我在我的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链接到表视图。 我在这里错过了什么?谢谢你的帮助
答案 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];
}