无法转换 'UICollectionViewCell' 类型的值
Could not cast value of type 'UICollectionViewCell'
我在故事板中使用自定义 CollectionViewCell。
当我启动应用程序时,我收到此消息:
Could not cast value of type 'UICollectionViewCell' to
TestProject.CollectionViewCell.
Xcode 中的 CollectionViewController 模板在 viewDidLoad 中附带了这行代码,它改变了故事板中的规范。
// Register cell classes
self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
只需删除该行即可。
在旧的 Swift 版本中,该行是:
// Register cell classes
self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
我在单元测试中从情节提要中实例化 ViewController
时遇到了这个错误。
storyboard.instantiateViewControllerWithIdentifier("someVC") as! MyViewController
问题是我已将身份检查器中的特定模块分配给 Storyboard 中的那个 VC。我删除了它,因此它默认为当前模块,即 运行 时的应用程序模块和测试时的测试模块。
我遇到了这个问题,因为在 viewDidLoad()
我用 UICollectionViewCell class 注册了我的单元格。在我的 cellForItemAtIndexPath
中,使用 CustomSubcalssCollectionViewCell 作为 dequeueReusableCell。
确保registerClass和dequeueReusableCell相同class解决问题
self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! SomeUICollectionCellClass
当自定义 class(在 Xcode 检查器上)仍然将其 class 设置为默认 UICollectionViewCell 而不是我的自定义 class 时,我收到此错误 TestProject.CollectionViewCell.
要修复它,只需将自定义 class 更改为您的实现即可。
self.collectionView!
.register(MyCollectionViewCell.self,
forCellWithReuseIdentifier: reuseIdentifier
)
您不必删除此行。如果您想使用代码
注册 class,您将注册自己的 class 继承自 UICollectionViewCell.self
的单元格
如果您在 Storyboard 和代码中注册您的单元格 class,您将收到此错误。选择一个或另一个,不要同时选择两个,问题就会消失。
我希望 Apple 没有在他们的模板中包含这段代码:
self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)
特别是因为他们总是建议您通过 Storyboard 注册您的单元格。让事情变得非常混乱。
我在故事板中使用自定义 CollectionViewCell。 当我启动应用程序时,我收到此消息:
Could not cast value of type 'UICollectionViewCell' to TestProject.CollectionViewCell.
Xcode 中的 CollectionViewController 模板在 viewDidLoad 中附带了这行代码,它改变了故事板中的规范。
// Register cell classes
self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
只需删除该行即可。
在旧的 Swift 版本中,该行是:
// Register cell classes
self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
我在单元测试中从情节提要中实例化 ViewController
时遇到了这个错误。
storyboard.instantiateViewControllerWithIdentifier("someVC") as! MyViewController
问题是我已将身份检查器中的特定模块分配给 Storyboard 中的那个 VC。我删除了它,因此它默认为当前模块,即 运行 时的应用程序模块和测试时的测试模块。
我遇到了这个问题,因为在 viewDidLoad()
我用 UICollectionViewCell class 注册了我的单元格。在我的 cellForItemAtIndexPath
中,使用 CustomSubcalssCollectionViewCell 作为 dequeueReusableCell。
确保registerClass和dequeueReusableCell相同class解决问题
self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! SomeUICollectionCellClass
当自定义 class(在 Xcode 检查器上)仍然将其 class 设置为默认 UICollectionViewCell 而不是我的自定义 class 时,我收到此错误 TestProject.CollectionViewCell.
要修复它,只需将自定义 class 更改为您的实现即可。
self.collectionView!
.register(MyCollectionViewCell.self,
forCellWithReuseIdentifier: reuseIdentifier
)
您不必删除此行。如果您想使用代码
注册 class,您将注册自己的 class 继承自UICollectionViewCell.self
的单元格
如果您在 Storyboard 和代码中注册您的单元格 class,您将收到此错误。选择一个或另一个,不要同时选择两个,问题就会消失。
我希望 Apple 没有在他们的模板中包含这段代码:
self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)
特别是因为他们总是建议您通过 Storyboard 注册您的单元格。让事情变得非常混乱。