Причина, по которой неожиданно найдено nil при неявном развертывании необязательного значения

#ios #swift

#iOS #swift

Вопрос:

Я создаю представление таблицы с возможностью расширения / свертывания.

Я использую раскадровку. И я также проверил раскадровку.

Проблем со сборкой нет.

Но это не работает на эмуляторах.

 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
  

Пожалуйста, скажите мне, почему возникает ошибка.

Комментарии:

1. Как вы представляете NoticeViewController ?

2. Я использую навигационный контроллер и боковое меню.

3. Можете ли вы показать представленный код NoticeViewController ?

4. Вероятно, вы не создаете контроллер представления из раскадровки.

Ответ №1:

Вы создаете свой собственный экземпляр NoticeViewController :

 private let noticeController = NoticeViewController()
  

Но вы тоже используете раскадровку! Вместо этого вам нужно получить правильное 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 , что объект отсутствует (nil).