在Swift 3.0中声明一个nib时出现“意外发现nil,同时展开一个可选值”错误
问题描述:
我是Swift的新手,并试图将自定义的UITableViewHeaderFooterView和一个笔尖连接到我的viewcontroller。当我这样做时,我会遇到这个常见的错误,这是我以前处理的错误,总结在this post。在Swift 3.0中声明一个nib时出现“意外发现nil,同时展开一个可选值”错误
但是这一次,我有点困惑,什么可选的解包,因此如何解决这个问题。
据我可以告诉一切都正确连接 - 我使用的UITableView(menuTableView)连接到IBOutlet,所有的自定义标头的部分在笔尖。标识符和笔尖名称也是正确的。任何想法发生了什么?这里是错误来源的代码:
menuTableView.register(UINib(nibName: "MenuTableHeader", bundle: nil), forHeaderFooterViewReuseIdentifier: "MenuTableHeader")
而这里是我的MenuTableHeader.swift文件,减去一个或两个函数。
class MenuTableHeader: UITableViewHeaderFooterView {
@IBOutlet var menuTableHeader: UIView!
@IBOutlet var menuHeaderLabel: UILabel?
@IBOutlet var menuHeaderImage: UIImageView?
var delegate: MenuTableHeaderDelegate?
var section: Int = 0
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
// Call tapHeader when tapping on this header
addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(MenuTableHeader.tapHeader(_:))))
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
谢谢!
答
在我看来,即使nib中只有一个元素,nib名称和标识符也不应该相同。例如,在我的项目中,我使用了以下行:
tableView.register(UINib(nibName: "PostCellTextAndPic", bundle: nil), forCellReuseIdentifier: "PostCellTextAndPicId")
相应地重命名文件和标识符。
可能的重复[什么是“致命错误:意外地发现零,而解包可选值”是什么意思?](http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found- nil-while-unwrapping-an-optional-valu) – rmaddy
我已经读过那篇文章,但我仍然困惑于它如何适用于声明一个笔尖,因为我不确定这种情况下的可选项是什么。 – Nate
你可以显示错误的控制台窗口吗? –