无法使种类的视图出列:从后台返回后的 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)遵循相同的协议,则必须在每个回调方法中实施此检查。
我正在用 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)遵循相同的协议,则必须在每个回调方法中实施此检查。