ios – 为什么我的UITableView尝试加载时出现无法出队的错误?

前端之家收集整理的这篇文章主要介绍了ios – 为什么我的UITableView尝试加载时出现无法出队的错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我收到以下错误

* Terminating app due to uncaught exception ‘NSInternalInconsistencyException’,reason: ‘unable to dequeue a cell
with identifier FontCell – must register a nib or a class for the
identifier or connect a prototype cell in a storyboard’

我不知道我在做错什么我设置单元格标识符(以编程方式,因为它不是通过Interface Builder创建的),并且执行我认为我应该在委托方法中执行的所有操作,但是当我尝试使UITableView加载时,我仍然收到该错误.

这是相关代码(值得注意的是,我已经将UITableViewCell子类化为自定义选项):

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.fonts.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier = @"FontCell";

    FontCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (!cell) {
        cell = [[FontCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FontCell"];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    int row = indexPath.row;

    cell.fontFamilyLabel.text = self.fonts[row];

    return cell;
}

这是我在子类UITableViewCell(FontCell)中改变的唯一方法

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.fontFamilyLabel = [[UILabel alloc] initWithFrame:CGRectMake(5,5,200,20)];
        self.fontFamilyLabel.textAlignment = NSTextAlignmentCenter;

        [self.contentView addSubview:self.fontFamilyLabel];
    }
    return self;
}

我究竟在做错什么?

解决方法

最简单的修复是将其更改为FontCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];与您当前的代码一样,您必须检查以确保如果您执行此方法,单元格不为零.

或者,您可以在绑定到@“FontCell”的表级别注册UINib或Class

例如(在viewDidLoad中):

[self.tableView registerClass: [FontCell class] forCellReuseIdentifier:@"FontCell"];

那你可以做

FontCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FontCell" forIndexPath:indexPath];

这个方法的好处是你知道你的单元格永远不会是零,所以你可以立即开始修改它.

猜你在找的iOS相关文章