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

iOS开发-[UITableViewController loadView]加载nib未获取UITableView报错咨询

报错触发原因

该报错是UITableViewController的固有校验逻辑触发的:UITableViewController要求其自身的view属性必须是UITableView或其子类实例,当系统从nib(包括Storyboard、xib文件)加载该控制器的视图时,拿到的根视图是普通UIView而非UITableView,就会抛出该异常。
你提供的AppDelegate代码使用了UIScene生命周期管理,该报错和AppDelegate无关,问题出在你项目中某个继承自UITableViewController的控制器的IB配置/代码初始化逻辑上。

排查步骤
  • 首先定位报错对应的控制器:在Xcode的断点导航器添加全局异常断点,重新运行项目,触发崩溃时就能定位到具体是哪个UITableViewController子类出了问题
  • 打开该控制器对应的Storyboard或xib文件,查看控制器的根视图类型:如果右侧Identity检查器中展示的Class是UIView而非UITableView,即可确认问题
  • 检查控制器的viewIBOutlet绑定:确认没有把view属性错误绑定到非UITableView的其他视图对象上
  • 如果是纯代码初始化该控制器,检查初始化时是否错误传入了根视图为普通UIView的xib名称
修复方案

根据你的业务需求二选一即可:

方案1:保留UITableViewController父类

直接把控制器的根视图类型修改为UITableView:选中IB中的根视图,在Identity检查器把Class修改为UITableView,之后按需给tableView添加约束、设置代理和数据源即可。
如果是纯代码创建控制器,不需要自定义loadView方法,或者在loadView中直接给self.view赋值为你创建的UITableView实例即可。

方案2:改用UIViewController作为父类

如果你不需要UITableViewController的默认特性(比如自动适配UIRefreshControl、默认实现tableView数据源/代理的空实现等),直接把控制器的父类从UITableViewController修改为UIViewController,之后手动添加tableView属性,遵守UITableViewDataSource、UITableViewDelegate协议实现相关逻辑即可。

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:45:02