ios - 以编程方式添加按钮会导致致命错误
问题描述
我正在创建一个对象检测应用程序,我目前让它在结果周围生成边界框。每次检测到新对象时,我都想创建一个按钮,以便能够导航到该对象的描述页面。我在 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
我已经研究了这个问题并找到了解决方案(例如确保按钮与情节提要正确链接),但它们似乎并不适用,因为我想以编程方式创建按钮。
解决方案
如果被声明为,你打电话showDetailView(buildingName: String)
太早了resultView
@IBOutlet var resultView: UIView!
当你打电话时
ViewController().showDetailView(buildingName: String(observationName))
视图层次结构尚未创建。
但是我不确定您要达到什么目的,因为您的陈述没有任何意义,因为ViewController
在任何地方都没有。
确保在将实例添加到窗口showDetailView
后调用。ViewController
推荐阅读
- c - 这是分配内存的正确方法吗?
- c# - 在 .net 应用程序中保留公共库代码的最佳方法
- python - 我想在 2 个日期的同一点绘制数据
- python - 创建全卷积网络
- javascript - ChartJS:具有多个数据集的水平条不显示条
- javascript - 理解 If 语句中的 Javascript 对象
- excel - 我想将工作表 1 的所有单元格与工作表 2 进行比较,匹配的值变为黄色
- php - 为什么来自 phpinfo() 的 o/p 的指令“配置文件(php.ini)路径”和“加载的配置文件”显示完全不同的位置?
- javascript - javascript 从 firebase 检索每个数据
- visual-studio-code - 当我格式化代码时,多行变成一行