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

macOS下@SceneStorage无法保留列表选中状态的技术咨询

问题解答

问题1:你确实遗漏了macOS应用场景状态持久化的关键配置

@SceneStorage依赖macOS的场景恢复机制实现数据持久化,默认情况下macOS应用不会自动保存/恢复场景状态:

  • 通过Command+Q完全退出应用或使用归档后的独立App时,系统不会保留场景相关的状态数据
  • Xcode中直接停止运行时,应用进程被强制终止,场景状态未被系统清理,所以偶尔能保留,但这不属于正常的持久化行为

问题2:让选中状态稳定保留的操作步骤

1. 配置应用场景恢复能力

在Xcode中打开项目的Info.plist(或通过target的Info标签页的自定义属性)添加以下配置:

  • 添加Application Scene Manifest -> Window Scenes -> Window Scene Restoration Class,值设为NSWindowSceneRestoration
  • 添加Supports Automatic Termination,值设为YES;添加Supports Sudden Termination,值设为NO

这两项配置会让应用在退出前有机会保存场景状态,确保@SceneStorage的数据被持久化到磁盘。

2. 优化代码的状态绑定(可选但推荐)

你的代码逻辑基本正确,可添加编辑状态的环境变量,让List默认支持选中操作,调整后的代码如下:

struct ContentView: View {
    
    @SceneStorage("selectedIndex") var selectedIndex: Int?
    
    var body: some View {
        List(0..<10, selection: $selectedIndex) { index in
            Text("Cell \(index)")
                .id(index)
        }
        .environment(\.editMode, .constant(.active)) // 默认开启编辑状态,无需手动切换即可选中单元格
    }
}

3. 验证效果

完成配置后:

  • 通过Command+Q退出应用,再次启动时选中状态会自动恢复
  • 归档后的独立App也能稳定保留选中状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:05:17