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

Xcode15中@SceneStorage无法持久化选中标签,@AppStorage正常的原因?

@SceneStorage无法持久化Tab选中状态的原因(Xcode15)

问题描述

尝试用@SceneStorage持久化TabView的选中标签信息,编写代码如下:

struct MainView: View {
    @SceneStorage("selectedTab") var selectedTab: String = "list"
    var body: some View {
        TabView(selection: $selectedTab) {
            Text("1")
                .tabItem(Text("1")).tag("1")
            Text("2")
                .tabItem(Text("2")).tag("2")
            Text("3")
                .tabItem(Text("3")).tag("3")
        }
    }
}

实际测试发现@SceneStorage无法存储数据,改用@AppStorage则能正常工作,使用环境为Xcode15。

原因分析

  • @SceneStorage的作用域限定在单个场景的生命周期内,当对应的场景被系统销毁时,存储的数据会被清除。在Xcode15对应的iOS/iPadOS版本中,TabView作为根视图时,其选中状态的变更无法正确触发@SceneStorage的持久化更新机制,系统没有将该状态变更识别为需要保存的场景状态。
  • @AppStorage基于UserDefaults实现,作用域覆盖整个应用,不受单个场景生命周期的影响,因此可以稳定保存Tab选中状态。
  • 额外注意:代码中selectedTab的初始值设为"list",但所有标签的tag都是"1"、"2"、"3",这会导致首次加载时选中状态异常,建议将初始值修改为与某个tag匹配的内容(比如"1"),避免状态不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:24:57