ios - Nib awakefromNib() 崩溃
问题描述
我有一个带有标签和 collectionView 的类,这是我的代码。
class CardSensors: UIView {
@IBOutlet weak var botName: UILabel!
@IBOutlet weak var sensorsCollectionView: UICollectionView!
var viewModel: NewsFeedViewModel! {
didSet {
setUpView()
}
}
override func awakeFromNib() {
super.awakeFromNib()
let nibName = UINib(nibName: "SensorCollectionViewCell", bundle:nil)
sensorsCollectionView.register(nibName, forCellWithReuseIdentifier: "SensorCollectionViewCell")
// Initialization code
}
func setUpView() {
botName.text = viewModel.botName
}
}
显然,我的单元格具有正确的 ID 和正确的重用标识符。当我尝试这样称呼笔尖时。
let sensorView = CardSensors()
sensorView.awakeFromNib()
我明白了Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
。我试图强制这些值,但我总是遇到一些错误。
我究竟做错了什么?
解决方案
正如其他人提到的,您不应该手动调用 awakeFromNib(),这类似于自动调用 viewDidLoad() 和 viewWillAppear() 的方式,操作系统将触发它以让您知道您的视图已加载。
要初始化您的视图,您可以使用以下静态函数,它允许您调用类来创建 CardSensors 的新实例。
class CardSensors: UIView {
@IBOutlet weak var botName: UILabel!
@IBOutlet weak var sensorsCollectionView: UICollectionView!
var viewModel: NewsFeedViewModel! {
didSet {
setUpView()
}
}
static func loadFromNib() -> CardSensors {
return Bundle.main.loadNibNamed("CardSensors", owner: nil, options: nil)?.first as! CardSensors
}
override func awakeFromNib() {
super.awakeFromNib()
sensorsCollectionView.register(nibName, forCellWithReuseIdentifier: "SensorCollectionViewCell")
}
func setUpView() {
botName.text = viewModel.botName
}
}
let sensorView = CardSensors.loadFromNib()
推荐阅读
- sql - 从一个表创建到查找表的多个连接
- python - 解析文件时获取检查按钮值
- python - python:根据输入变量生成段落
- ruby-on-rails - 谁能帮我解决 rails mongoid-history gem 问题
- c# - Microsoft.ApplicationInsights.Channel.InMemoryTransmitter.Runner()
- qt - 如何处理子菜单的 onClick 或 onTriggered 事件?
- laravel - 响应标头中的 Cookie 未在浏览器中显示
- highcharts - 没有滚动导航器跳转的 Highstock
- tensorflow - 在颤振中运行 tensorflow-lite 的最佳选择是什么?
- javascript - 如何通过数组中的字符串值交换位置?