Xcode SwiftUI项目构建成功后窗口不显示,main.storyboard报配置警告
问题修复方案
1. 先消除Storyboard警告
你遇到的Unsupported Configuartion: Window Controller requires a content view controller是Storyboard的配置校验错误,直接按以下步骤处理:
- 选中Storyboard里作为入口的Window Controller,打开身份检查器,确认自定义类
FirstWindowController的Module选项选择的是当前项目的同名模块,重命名项目很容易残留旧模块名导致自定义类没有被正确关联。 - 给Window Controller绑定一个默认的内容视图控制器:直接在Storyboard里拖一个空的
NSViewController,按住Control从Window Controller拖到这个空视图控制器,选择Relationship Segue - content view controller即可。你后续会在windowDidLoad里替换contentView,这个空控制器不会影响业务逻辑,只是用来满足Storyboard的配置要求。
2. 修复窗口不显示问题
你当前的代码存在逻辑冲突:同时启用了Storyboard入口Window Controller,又在AppDelegate的applicationDidFinishLaunching方法里新建了一个NSWindow实例覆盖了Storyboard自动生成的window,且新建的window没有设置内容视图、也没有触发显示逻辑。根据你的使用场景二选一即可:
场景A:沿用Storyboard作为入口(和你参考的正常项目逻辑一致)
直接删除AppDelegate中applicationDidFinishLaunching里所有创建window的代码,Storyboard会自动实例化FirstWindowController、执行windowDidLoad方法设置SwiftUI内容视图并自动显示窗口。
如果删除后依然无法显示,执行以下操作清除Xcode缓存:
- 按
Command + Shift + K清空构建文件夹 - 重启Xcode后重新构建项目,重命名项目的缓存残留经常会导致配置不生效
额外检查项:打开项目的Info.plist,确认Main storyboard file base name的配置值和你的Storyboard文件名完全匹配(默认是Main,注意大小写)。
场景B:沿用AppDelegate创建window的逻辑
如果不需要使用Storyboard的Window Controller,直接移除Storyboard的入口点标记,然后在applicationDidFinishLaunching末尾补充以下代码:
// 给新建的window设置SwiftUI内容视图 let contentView = ContentView(myListModel: MyListModel()) .environmentObject(UserData()) window?.contentView = NSHostingView(rootView: contentView) // 触发窗口显示 window?.makeKeyAndOrderFront(nil)
同时确认AppDelegate里已经声明了强引用的window属性:var window: NSWindow?。
内容的提问来源于stack exchange,提问作者zmerr
相关产品推荐
相关产品推荐

