我有一个带有标签和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.我试图强迫这些值,但我总是会犯一些错误。
我做错了什么?
发布于 2019-09-13 08:00:42
正如其他人提到的,您不应该手动调用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()发布于 2019-09-13 04:05:28
您不应该自己调用awakefromNib,因为在您输入视图之后将通过使用UINib或从Bundle.main.loadNibNamed加载Nib来调用awakefromNib。您可以使用以下方法修复错误:
class CardSensors: UIView {
@IBOutlet weak var botName: UILabel!
@IBOutlet weak var sensorsCollectionView: UICollectionView!
var viewModel: NewsFeedViewModel! {
didSet {
setUpView()
}
}
override init CardSensors() {
super.init()
let nibName = UINib(nibName: "SensorCollectionViewCell", bundle:nil)
sensorsCollectionView.register(nibName, forCellWithReuseIdentifier: "SensorCollectionViewCell")
// Initialization code
}
func setUpView() {
botName.text = viewModel.botName
}
}https://stackoverflow.com/questions/57915039
复制相似问题