正在练习MVC模式,并希望使用情节提要将视图与ViewController分开。
在main.storyboard中,我有一个ViewController,并且rootview中有一些uilabel。
为了将视图代码与viewcontroller分开,我从viewcontroller场景中选择了视图,创建了FruitDetailView类并将其在情节提要(Istoryboard)身份检查器中子类化。
并将UILabels连接到FruitDetailView类。
class FruitDetailView: UIView {
@IBOutlet weak var name: UILabel!
@IBOutlet weak var type: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
name.text = ""
type.text = ""
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func update(_ detail: Fruit) {
name.text = detail.name
type.text = detail.type
}
}
在viewController中,创建了FruitDetailView()实例。 并在loadview()方法中,分配了fruitDetailView实例以查看属性。
class FruitDetailViewController: UIViewController {
private let fruitDetailView = FruitDetailViewController()
var fruit = Fruit()
override func loadView() {
view = fruitDetailView
fruitDetailView.update(fruit)
}
}
但是当我运行该应用程序时,该应用程序崩溃并出现错误。
我该如何解决?
答案 0 :(得分:0)
您的问题是,您想要在创建它的FruitDetail类之前就创建它的属性。将断点放在name.text = ""
上并运行,您将明白我的意思。要解决此问题,只需安全地控制nil值即可:
if let label = name { // by the way consider in future to assign values like nameLabel rather than name
name.text = "put your string value"
}