我在Storyboard中使用自定义CollectionViewCell。 当我启动应用程序时,我收到此消息:
无法转换类型的值' UICollectionViewCell'至 TestProject.CollectionViewCell。
答案 0 :(得分:182)
Xcode中CollectionViewController的模板附带了viewDidLoad中的这行代码,它改变了故事板中的规范。
// Register cell classes
self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
只需删除该行。
在较旧的Swift版本中,该行是:
// Register cell classes
self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
答案 1 :(得分:46)
我遇到了这个问题,因为在viewDidLoad()
我用 UICollectionViewCell 类注册了我的单元格。在我的cellForItemAtIndexPath
使用 CustomSubcalssCollectionViewCell 进行dequeueReusableCell。
确保 registerClass 和 dequeueReusableCell 是同一个类解决问题
self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! SomeUICollectionCellClass
答案 2 :(得分:6)
当自定义类(在Xcode检查器上)仍然将其类设置为默认的UICollectionViewCell而不是我的TestProject.CollectionViewCell的自定义类时,我收到此错误。
要修复它,只需将自定义类更改为您的实现。
答案 3 :(得分:5)
我在单元测试中从Storyboard实例化ViewController
时遇到此错误。
storyboard.instantiateViewControllerWithIdentifier("someVC") as! MyViewController
问题是我在Identity Checkctor中为故事板中的VC分配了一个特定模块。我将其删除,因此默认为当前模块,即运行时的应用程序模块和测试时的测试模块。
答案 4 :(得分:1)
self.collectionView!
.register(MyCollectionViewCell.self,
forCellWithReuseIdentifier: reuseIdentifier
)
您不必删除此行。如果要使用代码
注册类,则将注册由UICollectionViewCell.self
继承的自己的单元类
答案 5 :(得分:0)
如果在Storyboard和代码中都注册了单元类,则会出现此错误。选择其中一个,永远不会两者都解决,问题就会消失。
我希望Apple不在模板中包含以下代码:
self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)
尤其是因为他们总是建议您通过Storyboard注册单元。使事情变得非常混乱。