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

macOS SwiftUI:独立WindowGroup能否共享DocumentGroup的ModelContext?

实现独立窗口共享DocumentGroup的ModelContext

当然可行,你可以通过在打开窗口时显式传递ModelContext的方式实现,核心思路是从持有上下文的EditorView将当前文档的ModelContext传递给新打开的工具窗口——因为DocumentGroup的ModelContext是和当前编辑的文档实例绑定的,每个文档都有独立的上下文,无法在App层面直接全局获取。

修改步骤:

  1. 调整工具窗口的打开逻辑
    在EditorView中调用openWindow时,通过environment将当前的modelContext注入到新窗口的视图环境中:
struct EditorView: View {
    @Environment(\.modelContext) private var modelContext
    @Environment(\.openWindow) private var openWindow
    var body: some View {
        Button("Open Tools") {
            openWindow(id: "ToolsWindow") {
                ToolsView()
                    .environment(\.modelContext, modelContext)
            }
        }
    }
}
  1. 保持ToolsView的环境注入逻辑不变
    你的ToolsView原本通过@Environment(\.modelContext)获取上下文,现在因为打开时已经注入了正确的环境,所以不需要修改:
struct ToolsView: View {
    @Environment(\.modelContext) private var modelContext
    var body: some View {
        Text("Tools")
        // 这里可以直接使用modelContext操作当前文档的数据
    }
}

原理说明

DocumentGroup会为每个打开的文档创建独立的ModelContext,并自动注入到其编辑器视图的环境中。通过在打开工具窗口时显式传递这个上下文,就能保证工具窗口和当前编辑的文档共享同一个数据上下文,所有数据操作都会同步到当前文档中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:35:16