iOS:dequeueReusableCellWithIdentifier 返回单元格,其中 IBOutlets 为 nil

Posted

技术标签:

【中文标题】iOS:dequeueReusableCellWithIdentifier 返回单元格,其中 IBOutlets 为 nil【英文标题】:iOS: dequeueReusableCellWithIdentifier returning cell with IBOutlets that are nil 【发布时间】:2016-02-02 01:26:01 【问题描述】:

我有一个自定义 UITableViewCell,其中一个视图在 XIB 文件中定义:

@interface MetroTableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *metroLineName;
@end

我正在使单元格出列:

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


    MetroTableViewCell *cell = (MetroTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MetroTableViewCell" forIndexPath:indexPath];

    // AT THIS POINT, cell.metroLineName is equal to nil
    return cell;

该类正在向表格视图注册:

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

在 XIB 文件中,我还将类设置为“MetroTableViewCell”

那么为什么将 IBOutlet 设置为 nil?

注意:我使用时不会出现此问题:

MetroTableViewCell *cell = [[[NSBundle mainBundle] loadNibNamed:@"MetroTableViewCell"
                                                              owner:self options:nil]
                                                      objectAtIndex:0];

【问题讨论】:

【参考方案1】:

因为您创建了一个 xib 节目,所以您需要 registerNib 而不是类。如果您创建没有xib 的自定义单元格,您将使用registerClass

所以你应该改变这段代码:

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

收件人:

[self.tableView registerNib:[UINib nibWithNibName:@"MetroTableViewCell" bundle:nil] forCellReuseIdentifier:@"MetroTableViewCell"];

希望对您有所帮助!

【讨论】:

【参考方案2】:

使用registerClass:forReuseIdentifier: 不使用NIB 来创建单元格。它只是创建给定类的一个新实例。

你想使用registerNib:forReuseIdentifier:

而不是这个:

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

使用:

[self.tableView registerNib:[UINib nibWithNibName:@"MetroTableViewCell" bundle: nil]
   forCellReuseIdentifier:@"MetroTableViewCell"];

【讨论】:

以上是关于iOS:dequeueReusableCellWithIdentifier 返回单元格,其中 IBOutlets 为 nil的主要内容,如果未能解决你的问题,请参考以下文章

IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO

IO复用阻塞IO非阻塞IO同步IO异步IO

四种IO模型‘阻塞IO/非阻塞IO/信号驱动IO/异步IO‘

5种IO模型阻塞IO和非阻塞IO同步IO和异步IO

网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别