以编程方式添加按钮会导致致命错误

时间:2020-06-24 17:39:52

标签: ios swift swift5

我正在创建一个对象检测应用程序,目前我正在使用它在结果周围生成边界框。我想在每次检测到新对象时都能创建一个按钮,以能够导航到该对象的描述页面。我在View Controller之外的文件中生成观测值,但是在ViewController中创建按钮。我知道标题不是 nil ,但是添加子视图时出现致命错误。 一旦检测到物体,我就会致电:

 ViewController().showDetailView(buildingName: String(observationName))

然后在View Controller中运行:

public func showDetailView(buildingName: String){ 
    let detailViewButton = UIButton() 

    detailViewButton.setTitle(buildingName, for: .normal) 

    detailViewButton.frame = CGRect(x:0,y:0,width:200,height: 100) 

    resultView.addSubview(detailViewButton) // error here

    _ = Timer.scheduledTimer(withTimeInterval: 10.0, repeats: false) { timer in 
    detailViewButton.removeFromSuperview() 
    } 
}
------------------------------------------------------------------------

最后,一旦检测到对象,我将收到此错误:

Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value

我已经研究了问题并找到了解决方案(例如确保从情节提要中正确链接了按钮),但是由于我想以编程方式创建按钮,因此它们似乎并不适用。

1 个答案:

答案 0 :(得分:0)

如果将showDetailView(buildingName: String)声明为{p>

resultView

以及致电时

@IBOutlet var resultView: UIView!

尚未创建视图层次结构。

但是由于ViewController().showDetailView(buildingName: String(observationName)) 并没有出现在任何地方,因此我不确定您要实现的目标是没有意义的。

确保将ViewController实例添加到窗口后调用showDetailView