表视图 nil 致命错误:隐式展开可选值时意外发现 nil

问题描述 投票:0回答:1

我得到了他的表视图 nil 致命错误:在隐式展开可选值时意外发现 nil。

final class SculpturesARViewController: UIViewController {
  private func presentSheetView() {
        let sheetViewController = SculpturesSheetViewController()
        if let sheet = sheetViewController.sheetPresentationController {
            sheet.detents = [.medium(), .large()]
            sheet.selectedDetentIdentifier = .medium
            sheet.preferredCornerRadius = 20
            sheet.prefersGrabberVisible = true
        }
        present(sheetViewController, animated: true)
    }
}

final class SculpturesSheetViewController: UIViewController {

    @IBOutlet private weak var sculpturesTableView: UITableView!
    typealias DataSource = UITableViewDiffableDataSource<SculpturesSections, SculpturesRows>
    typealias Snapshot = NSDiffableDataSourceSnapshot<SculpturesSections, SculpturesRows>
     
    override func viewDidLoad() {
        super.viewDidLoad()
        setUp()
        viewModel = SculpturesSheetViewModel(sculpturesSheetService: SculpturesNetworkService(),
                                             params: SculpturesParameters(languageId: "en"))
    }

   private func setUp() {
        configureTableView()
        
        cellFactory = SculpturesCellFactory(tableView: sculpturesTableView,
                                            sculpturesViewController: self)
    }
private func configureTableView() {
        sculpturesTableView.dataSource = dataSource
        let sections: [Any] = [SummaryTableViewCell.self, Video.self, ARFeatures.self]
        sections.forEach { section in
            let nibSection = UINib(nibName: String(describing: section), bundle: Bundle(for: type(of: self)))
            sculpturesTableView.register(nibSection, forCellReuseIdentifier: "\(section)")
        }
    }

已尝试删除插座并再次连接它,添加委托,以不同的方式实例化为:letsheetViewController = SculpturesSheetViewController(nibName:“SculpturesSheetViewController”,bundle:nil) 但是当我这样做时,我收到错误:线程 1:“无法在捆绑包中加载 NIB:'NSBundle (已加载)',名称为 'SculpturesSheetViewController'”

怎么了? 没有任何效果

swift uitableview diffabledatasource
1个回答
0
投票

我可以假设您的视图控制器位于故事板文件内。在这种情况下,你不能这样初始化它:

let sheetViewController = SculpturesSheetViewController()

相反,您应该从故事板加载它:

let board = UIStoryboard(name: "Main", bundle: nil)
let sheetViewController = board.instantiateViewController(withIdentifier: "myVCID")

您应该像图片一样在情节提要中设置 myVCID。 希望有帮助!

VC ID in storyboard

© www.soinside.com 2019 - 2024. All rights reserved.