在Swift 3.0中声明一个nib时出现“在展开可选值时意外发现nil”错误

时间:2017-04-05 01:34:00

标签: swift uitableview

我是Swift的新手,我正在尝试将自定义的UITableViewHeaderFooterView与nib连接到我的viewcontroller。当我这样做时,我得到了这个常见的错误,我之前已经处理过这个错误,并在this post中进行了总结。

然而这一次,我对于什么是可选的解包以及如何解决这个问题感到有点困惑。

据我所知,所有内容都正确连接 - 我正在使用的UITableView(menuTableView)连接到IBOutlet,nib中自定义标头的所有部分也是如此。标识符和笔尖名称也是正确的。知道发生了什么事吗?这是错误产生的代码:

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

{% extends "rest_framework/login_base.html" %}

{% block branding %}
    <h3 style="margin: 0 0 20px;">Some New Title</h3>
{% endblock %} 

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