我已经在 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/

10-12 14:35