UICollectionReusableView 部分 Header 由于 IBOutlet 连接而崩溃

UICollectionReusableView Section Header crashes because of IBOutlet connection

我有一个 UICollectionViewController 委托 UICollectionViewDataSource 和 UICollectionViewDelegate。我的 collection 视图显示 2 个包含多行数据的部分并且工作正常。

我创建了一个部分 Header(在 IB 属性检查器 -> 附件中),然后将 classes UICollectionReusableView 与 SWOHighScoreHeader class:

@interface SWOHighScoreHeader : UICollectionReusableView
@property (strong, nonatomic) IBOutlet UILabel *hiScoreHead;
@end

我将此 class (SWOHighScoreHeader) 设置为 IB 中 UICollectionReusableView 的自定义 Class。

在UICollectionViewController中我使用的方法是:

-(UICollectionReusableView*)collectionView:(UICollectionView*)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{

SWOHighScoreHeader *highScoreHeaderView = nil;

if ([kind isEqual:UICollectionElementKindSectionHeader]) {
    highScoreHeaderView = [collectionView dequeueReusableSupplementaryViewOfKind:kind
                                                             withReuseIdentifier:@"highScoreTableHead"
                                                                    forIndexPath:indexPath];
}

return highScoreHeaderView;
}

标识符 highScoreTableHead 在 IB 中设置为 UICollectionReusableView Collection 可重用视图标识符。

在此阶段,headers 部分可以正确显示,尽管使用默认标签文本。

当我将 IBOutlet UILabel hiScoreHead 属性 与 IB 中的插座连接时,我的问题就出现了。当我这样做时,程序崩溃:

未知 class SWOHighScoreHeader 在 Interface Builder 文件中。

** * 由于未捕获的异常 'NSUnknownKeyException' 而终止应用程序,原因:'[ setValue:forUndefinedKey:]: 这个 class 不是键值 coding-compliant 键 submitButton。'

我试过删除插座连接并重新连接,但仍然没有。我哪里出错了?

将以下内容属性 添加到 SWOHighScoreHeader:

@property (weak) IBOutlet UIButton* submitButton;

或者尝试找出情节提要中的哪个对象期望 submitButton 实际存在。

IBoutlet 必须始终是弱属性,否则它的容器将不会被释放。

我通过使用标签而不是 IBOutlets 解决了这个问题,即

UILabel *hiScoreHeader = (UILabel *)[highScoreHeaderView viewWithTag:101];
hiScoreHeader.text = @"Header Text";

我不确定为什么 IBOutlets 不起作用,但至少我有一个解决方案。