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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:39:00