在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") 
} 

谢谢!

+0

可能的重复[什么是“致命错误:意外地发现零,而解包可选值”是什么意思?](http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found- nil-while-unwrapping-an-optional-valu) – rmaddy

+0

我已经读过那篇文章,但我仍然困惑于它如何适用于声明一个笔尖,因为我不确定这种情况下的可选项是什么。 – Nate

+0

你可以显示错误的控制台窗口吗? –

在我看来,即使nib中只有一个元素,nib名称和标识符也不应该相同。例如,在我的项目中,我使用了以下行:

tableView.register(UINib(nibName: "PostCellTextAndPic", bundle: nil), forCellReuseIdentifier: "PostCellTextAndPicId") 

相应地重命名文件和标识符。