我已经在 Swift 中实现了自定义 UICollectionViewCell
类,使用 UICollectionViewCotroller 创建了 Storyboard,分配了我的自定义 Controller 类、自定义单元类、单元 id 等......基本上是使 UICollectionViewController 工作所需的一切。
在 Storyboard单元原型(prototype)中,我添加了一些 View 并将它们作为 IBOutlets 连接到我的自定义单元类:
这里是我的 IBOutlets 代码(如您所见,它们已连接):
我也在我的 Controller 中注册了自定义单元类:
self.collectionView.registerClass(MyCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
当我在代码中出列我的单元格时,它返回我的自定义类型的单元格,但两个 IBOutlets 都没有初始化(等于
nil
) let cell = collectionView?.dequeueReusableCellWithReuseIdentifier(reuseIdentifier,
forIndexPath: indexPath) as MyCollectionViewCell
if let path = indexPath {
// Crash here as imageView is nil
cell.imageView.image = imagesArray[path.item]
}
崩溃日志:
fatal error: unexpectedly found nil while unwrapping an Optional value
如果我在上面的
if
语句上放置断点并执行 po cell
我有这个输出:(lldb) po cell
0x00007fa799f4cdf0
{
UIKit.UICollectionViewCell = {
UIKit.UICollectionReusableView = {
UIKit.UIView = {
UIKit.UIResponder = {
ObjectiveC.NSObject = {}
}
}
}
}
selectionView = nil
imageView = nil
}
为什么 IBOutlets 没有初始化?
最佳答案
从 Beta5 开始,我遇到了同样的问题,尽管 xib 没有 Storyboard。
在xib的情况下,似乎是一个问题
init(nibName: nil, bundle: nil)
不选择默认的 xib 文件名。当我更改为显式 nibName 时
init(nibName: "MyClass", bundle: nil)
然后它又开始工作了。 Storyboard是否也有同样的问题 - 如果有办法强制使用 Storyboard名称,我会尝试。
关于ios - 连接的 IBOutlets 未初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25150226/