无法使种类的视图出列:从后台返回后的 UICollectionElementKindCell

Could not dequeue a view of kind: UICollectionElementKindCell after going back from background

我正在用 Swift3 构建键盘扩展。

我的键盘第一次启动,没问题,我的 collection 视图显示得很好,一切正常。

当我的键盘进入后台并在前台再次返回时,会出现此错误。例如,我启动 iMessage,显示我的键盘,点击 iPhone 的 "home button",再次启动 iMessage -> 崩溃:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier KeyboardViewCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

以下是我如何为单元格标识符设置故事板:

配对class:

下面是我如何从 cellForItemAt indexPath 方法调用它:

 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! KeyboardViewCell
        return cell

我不明白为什么在更换键盘后会崩溃,就像在那种情况下没有加载故事板之类的......我是不是忘记了什么?

我的故事板是这样的:

您的 KeyboardViewController 有两个 UICollectionView。在 cellForItemAt indexPath:

中使 KeyboardViewCell 出列时,确保 MyCollectionView 正在调用它的 dataSource
if collectionView === myCollectionView {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! KeyboardViewCell
    return cell
} else {
    //dequeue soundCollectionViewCell
}

如果您为多个 "delegator"(即多个 ColletionView)遵循相同的协议,则必须在每个回调方法中实施此检查。