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

使用storyboard的instantiateInitialViewController初始化初始VC为何崩溃?

问题原因及解决方案

核心问题

崩溃的根源是系统自动加载了Storyboard并调用了required init?(coder:)方法,而你在这个方法里抛出了fatalError。

当你的Info.plist中配置了Main storyboard file base name(对应键UIMainStoryboardFile)时,iOS启动时会自动加载指定的Storyboard,并尝试初始化初始视图控制器,这时候会调用你标记为required的init?(coder:)方法,直接触发崩溃。

解决步骤

步骤1:修改Info.plist

打开项目的Info.plist文件,找到Main storyboard file base name条目,删除它或者将值设为空。这样系统就不会自动加载Storyboard,而是由你在scene方法中手动控制初始化流程。

步骤2:验证代码正确性

你的现有代码逻辑是正确的,instantiateInitialViewController(creator:)闭包会接管视图控制器的创建,调用你自定义的init?(coder:viewModel:)方法,确保ViewModel被正确注入。确认以下两点:

  • Storyboard中初始视图控制器的Class已正确设置为ViewController
  • 自定义初始化方法中已正确调用super.init(coder: coder)

可选优化(非必须)

如果你不想修改Info.plist,可以修改required init?(coder:)方法,让它也能完成初始化(但会失去依赖注入的灵活性):

required init?(coder: NSCoder) {
    self.viewModel = ViewModel() // 使用默认ViewModel实例
    super.init(coder: coder)
}

但更推荐第一种方案,完全手动控制视图控制器的初始化,保证依赖注入的可控性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:05:14