由于IBOutlet连接,UICollectionReusableView Section Header崩溃

时间:2015-04-02 18:09:35

标签: ios objective-c uicollectionview sectionheader uicollectionreusableview

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

我创建了一个Section Header(在IB Attributes Inspector - > Accessories中),然后使用SWOHighScoreHeader类将UICollectionReusableView子类化:

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

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

在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集合可重用视图标识符。

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

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

Interface Builder文件中的未知类SWOHighScoreHeader。

** *由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥submitButton。'

我尝试删除插座连接并重新连接,但仍然没有。我出错的任何想法?

3 个答案:

答案 0 :(得分:0)

将以下属性添加到SWOHighScoreHeader:

@property (weak) IBOutlet UIButton* submitButton;

或者尝试找出故事板中哪个对象期望submitButton实际存在。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我通过使用Tags而不是IBOutlets来解决这个问题,即

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

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