从 XIB 加载时 UICollectionViewCell 导致崩溃

Posted

技术标签:

【中文标题】从 XIB 加载时 UICollectionViewCell 导致崩溃【英文标题】:UICollectionViewCell causing crash when loading from XIB 【发布时间】:2014-10-17 14:25:17 【问题描述】:

我有一个UICollectionViewCell 子类,它现在只显示一个带有背景颜色的UIView 子视图,以表明它就在那里。

为了从 XIB 加载,我必须替换这个:

- (void)viewDidLoad 
    [super viewDidLoad];
    [self.localPlayerItemsView registerClass:[MBTradeCollectionViewCell class]
                  forCellWithReuseIdentifier:CellIdentifier];

用这个:

- (void)viewDidLoad 
    [super viewDidLoad];
    UINib *nib = [UINib nibWithNibName:@"MBTradeCollectionViewCell" bundle:nil];

    [self.localPlayerItemsView registerNib:nib forCellWithReuseIdentifier:CellIdentifier];

这样做后,我会在collectionView:cellForItemAtIndexPath: 的第一行崩溃:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    MBTradeCollectionViewCell *aCell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier
                                                                                forIndexPath:indexPath];

    return aCell;

这是崩溃:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x7d461780> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key itemCountView.'

使用registerClass:forCellWithReuseIdentifier:时不会导致这个崩溃,但是它不会加载我的xib。

【问题讨论】:

检查 itemCountView 的自定义单元格插座连接。 听起来 IBOutlet 连接不正确。检查笔尖中的所有连接。 What does this mean? "'NSUnknownKeyException', reason: ... This class is not key value coding-compliant for the key X"的可能重复 【参考方案1】:

在您的MBTradeCollectionViewCell xib 文件中,不要更改文件所有者的任何内容。将top most view 的类更改为MBTradeCollectionViewCell,然后选择itemCountView,将其连接到您的top most view。希望这能解决问题。

【讨论】:

【参考方案2】:

这种崩溃通常发生在您的插座损坏时。检查您的 nib 文件以查找名称为 itemCountView 的插座,该插座将被损坏(未正确连接)。哪个会出现红色标记。

【讨论】:

【参考方案3】:

我修好了。

我进入助手模式,从物业拖到 IB,它提供了“文件所有者”或“贸易集合视图”选项?

我选择了最下面的那个,这意味着这些东西并没有与文件所有者挂钩,但事实证明它们在交易集合视图中也是可见的,并且它们被挂钩在那里。​​

它有效。

【讨论】:

以上是关于从 XIB 加载时 UICollectionViewCell 导致崩溃的主要内容,如果未能解决你的问题,请参考以下文章

从 xib 加载子类时如何设置子类 UIView 属性的值

从 xib 加载单元格时删除 UICollectionView 中的边框

从按钮按下加载xib

使用通过 ViewController 从 XIB 加载的子视图中的对象时出错

从资源包(非主)加载本地化的 xib 文件

从 xib 加载视图控制器返回错误的帧