- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 UICollectionView
。正如 dequeueReusableCell(withReuseIdentifier:for:)
所期望的那样,在调用此方法之前,您必须使用 register(_:forCellWithReuseIdentifier:)
方法注册一个类或 nib 文件方法,我在我的 viewDidLoad
函数中添加了一行 as
self.collectionView!.register(PhotoCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
现在,当我使用单元格进行出队和配置时,我遇到了错误并且应用程序崩溃了。
fatal error: unexpectedly found nil while unwrapping an Optional value
这是我的DataSource 方法:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier,
for: indexPath) as! PhotoCollectionViewCell
let aPhoto = photoForIndexPath(indexPath: indexPath)
cell.backgroundColor = UIColor.white
cell.imageView.image = aPhoto.thumbnail //this is the line causing error
return cell
}
这是我的 PhotoCollectionViewCell
类
class PhotoCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var imageView: UIImageView! //I double checked this IBOutlet whether it connects with Storyboard or not
}
现在到了有趣的部分。
我在 UICollectionView
中使用了一个 prototype
单元格,并且我从 设置了一个可重用标识符
>属性检查器。此外,我将 自定义类 从 identity inspector 更改为我的 PhotoCollectionViewCell
。
我搜索了同样的问题,发现在使用原型(prototype)单元时,删除
self.collectionView!.register(PhotoCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
代码将起作用。我试了一下,效果很好。
But I'm curious to know the reason behind this issue. I couldn't reproduce the same issue with
UITableView
but withUICollectionView
.
这UICollectionView's cell registerClass in Swift是关于如何在 UICollectionView
中注册类。但我的问题并不期望如何注册。我的问题是关于 UITableView
类不正确但仅 UICollectionView
的问题。我期待这个相互冲突的问题之间的实际区别。
最佳答案
有 3 种方法来注册单元格(UITableView
或 UICollectionView
)。
您可以注册类(class)。这意味着单元格没有 Nib 或 Storyboard。不会加载 UI,也不会连接 outlet,只会自动调用类初始化程序。
您可以注册一个UINib
(即一个xib
文件)。在这种情况下,从 xib 加载单元 UI 并连接 socket 。
您可以在 Storyboard中创建原型(prototype)单元。在这种情况下,单元会自动注册到特定的 UITableViewController
或 UICollectionViewController
。无法在任何其他 Controller 中访问该单元格。
选项不能组合。如果 Storyboard 中有单元格原型(prototype),则无需再次注册,否则会断开 Storyboard 连接。
关于ios - 寄存器有什么问题(_ :forCellWithReuseIdentifier:) on UICollectionView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44105665/
我正在使用 UICollectionView。正如 dequeueReusableCell(withReuseIdentifier:for:) 所期望的那样,在调用此方法之前,您必须使用 regist
registerClass:forCellWithReuseIdentifier: 方法的作用是什么?根据 Apple 的开发者文档,它应该是 "Register a class for use in
我是一名优秀的程序员,十分优秀!