SwiftUI @AppStorage 并不总是持久的价值

lac*_*her 1 resolver ios swiftui appstorage

我正在@AppStorageString财产一起使用。更改属性值时,视图会自动更新以反映预期的更改。然而,大多数时候它并没有持续存在UserDefaults。我觉得自己错过了一些东西,这让我感觉很愚蠢。还有其他人看到这个吗?

脚步:

  • 启动应用程序
  • 改变值
  • 杀死并重新启动应用程序
  • 将值更改为其他值
  • 杀死并重新启动应用程序

环境:

  • Xcode 13.4 (13F17a)
  • iOS 15.5 - iPhone 13 Pro 模拟器

非常简单的例子:

struct ContentView: View {
    @AppStorage("token") var token: String = ""

    var body: some View {
        Form {
            Section("Token") {
                Text(token)
            }

            Section("Debug") {
                Button("Update 01") {
                    token = "token-01"
                }

                Button("Update 02") {
                    token = "token-02"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

示例 gif

Uma*_*han 8

这种典型的场景可能发生在开发阶段,但不会发生在生产阶段,因为用户没有像 Xcode 那样的停止按钮,并且 UserDefault 类在应用程序被系统终止之前将更改写入磁盘。

所以我们知道用户的默认数据库是异步写入磁盘的,因此当我们通过 Xcode 上的停止按钮停止应用程序时,我们对默认值所做的更改可能不会写入数据库,您可以通过停止应用程序自行尝试通过滑动,您的数据将在下次启动时存储,但当您从 Xcode 停止时,您的数据将不会被保存