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
相关产品推荐
相关产品推荐

