首页 > 解决方案 > 隐式展开 Optional 值时意外发现 nil 的原因

问题描述

我正在制作一个可展开/折叠的表格视图。

我使用故事板。我还检查了故事板。

建筑没有问题。

但它不适用于模拟器。

import UIKit

class NoticeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    @IBOutlet weak var noticeTableView: UITableView!
    
    var imageArr = ["cm_contents_01", "cm_contents_02", "cm_contents_03"]
    var nameArr = ["Notice 1", "Notice 2", "Notice 3"]
    
    var selectedIndex = -1
    var isCollapce = false
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .white
        
        noticeTableView.estimatedRowHeight = 3000
        noticeTableView.rowHeight = UITableView.automaticDimension
    }
...

这里有一个错误。

noticeTableView.estimatedRowHeight = 3000

和故事板连接。

在此处输入图像描述

单独做的时候执行得很好,但是和其他项目结合起来,所以出现了错误。

Unexpectedly found nil while implicitly unwrapping an Optional value

请告诉我为什么会出现错误。

标签: iosswift

解决方案


您正在制作自己的实例NoticeViewController

private let noticeController = NoticeViewController()

但是你也在使用 Storyboard!而不是这样做,您需要NoticeViewController从情节提要中正确获取您的信息,如下所示:

class ViewController: UIViewController, MenuControllerDelegate {
    private var sideMenu: SideMenuNavigationController?
    
    private var noticeController: NoticeViewController?

....

override func viewDidLoad() {
    super.viewDidLoad()

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    self.noticeController = storyboard.instantiateViewController(withIdentifier: "YourControllerId"
}

然后从那里,您将拥有一个适当的NoticeViewController. 您遇到的崩溃字面意思是tableView对象丢失(无)。


推荐阅读