You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Main storyboard加载SwiftQuiz控制器时报未获取UITableView崩溃如何修复

崩溃根因

报错信息已经明确指向问题本质:你在Storyboard中标识符为SwiftQuiz的视图控制器,绑定的自定义类继承自UITableViewController,但该控制器在Storyboard中配置的根视图是普通UIView,并非UITableView。
UITableViewController的loadView方法自带强制校验规则:要求自身的根视图必须是UITableView实例,一旦加载完成校验不通过,就会直接抛出NSInternalInconsistencyException导致应用崩溃。
你预期将测验控制器设为普通UIViewController,但实际在Storyboard的身份检查器里选错了类的父类层级,和你代码中实现的类类型不匹配。

修复方案

根据你的实际页面架构,二选一即可:

  • 方案1:匹配纯代码架构的原有设计(推荐)
    1. 打开Main.storyboard,选中SwiftQuiz对应的视图控制器
    2. 在右侧身份检查器中,将自定义类的父类从UITableViewController调整为UIViewController,确保你的测验控制器代码声明和配置一致:
      class SwiftQuizViewController: UIViewController {
          // 业务逻辑代码
      }
      
    3. 此时Storyboard中控制器的根视图保留普通UIView即可,不再受UITableViewController的类型校验约束。
  • 方案2:保留UITableViewController的类实现
    1. 如果你计划用UITableViewController作为测验页的基类,就把Storyboard上该控制器的根视图从普通UIView替换为UITableView
    2. 完成UITableView和控制器的数据源、代理绑定,满足UITableViewController对根视图的类型要求,即可避免校验崩溃。
额外校验项
  • 确认跳转时的实例化代码和Storyboard配置匹配,标准写法参考:
    let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
    guard let quizVC = mainStoryboard.instantiateViewController(
        withIdentifier: "SwiftQuiz"
    ) as? SwiftQuizViewController else {
        return
    }
    present(quizVC, animated: true)
    
  • 检查Main.storyboard中不要误将SwiftQuiz控制器设为初始控制器,避免和纯代码搭建的启动流程冲突。

内容的提问来源于stack exchange,提问作者Antonio A. Chavez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 23:24:03