iOS开发:如何设置初始视图控制器及解决启动报错问题
嘿,作为常年泡在iOS开发坑里的老鸟,这两个问题我太熟了,给你一步步讲清楚:
一、如何将另一个视图控制器设置为应用启动时的初始视图控制器?
分两种场景,看你是用Storyboard还是纯代码开发:
用Storyboard的情况
- 打开你的
Main.storyboard(或者你自定义的storyboard文件) - 在画布上找到你想设为启动入口的那个视图控制器
- 选中它,点击右侧面板的Attributes Inspector(就是那个带小齿轮的标签)
- 找到并勾选 Is Initial View Controller 选项——搞定!你会看到这个控制器左上角多出一个箭头,这就是启动入口的标记了
纯代码(不用Storyboard)的情况
如果你的项目完全不用Storyboard,得这么操作:
- 先去项目设置的General标签,往下滑到Deployment Info,把Main Interface输入框里的内容清空
- 打开
AppDelegate.swift(iOS 13及以上的话,可能是SceneDelegate.swift) - 在对应的启动方法里添加代码:
记得把// 初始化你要作为初始的视图控制器 let initialVC = YourCustomViewController() // 设置为窗口的根控制器 window?.rootViewController = initialVC window?.makeKeyAndVisible()YourCustomViewController换成你实际的控制器类名哦
二、勾选“Is Initial View Controller”后仍报错的解决方法
你遇到的Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set?这个报错,我踩过好几次坑,给你按优先级排几个解决步骤:
先确认Storyboard是否正确关联
去项目设置的General标签,检查Deployment Info下的Main Interface是不是选了你设置初始控制器的那个storyboard文件。要是这里空着或者选错了,Xcode根本找不到你设置的入口,肯定报错重新设置初始控制器,清Xcode缓存
有时候Xcode会抽风,缓存没更新。你可以先取消勾选目标控制器的Is Initial View Controller,按Cmd + S保存,然后再重新勾选,再保存一次,确保左上角的箭头正常显示。之后点击顶部菜单的Product -> Clean Build Folder(快捷键Cmd + Shift + K),重启Xcode再运行试试检查视图控制器的类关联是否正确
选中你的初始视图控制器,打开右侧的Identity Inspector(身份证图标那个标签),看看Class下拉框是不是选对了你的控制器类。要是不小心选成了默认的UIViewController或者别的错误类,Xcode没法实例化控制器,也会报这个错极端情况:检查Storyboard是否损坏
如果上面都没用,可能是storyboard文件坏了。你可以右键点击storyboard文件,选Open As -> Source Code,搜索initialViewController,看看对应的ID是不是和目标控制器的ID匹配。或者干脆拖一个新的视图控制器到画布,重新关联类、设置为初始,替换掉原来的那个试试
内容的提问来源于stack exchange,提问作者J Duh

