SwiftUI @AppStorage 并不总是持久值
SwiftUI @AppStorage not always persisting value
我正在使用 @AppStorage
和 String
属性。当更改 属性 的值时,视图会自动更新以反映预期的更改。然而,大多数时候它并没有持续 UserDefaults
。我觉得我在这里错过了一些东西的想法很愚蠢。还有其他人看到了吗?
步骤:
- 启动应用程序
- 更改值
- 终止并重新启动应用程序
- 将值更改为其他值
- 终止并重新启动应用程序
环境:
- Xcode13.4 (13F17a)
- iOS 15.5 - iPhone 13 专业模拟器
非常简单的例子:
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"
}
}
}
}
}
这种典型情况可能发生在开发阶段,但不会发生在生产阶段,因为用户没有像 Xcode 和 UserDefault class 这样的停止按钮,在应用程序被系统终止之前将更改写入磁盘.
所以我们知道用户的默认数据库是异步写入磁盘的,所以当我们从 Xcode 上的停止按钮停止应用程序时,我们对默认所做的更改可能不会写入数据库,您可以通过滑动停止应用程序自己尝试,您的数据将在下次启动时存储,但是当您从 Xcode 停止时,您的数据将不会被保存
我正在使用 @AppStorage
和 String
属性。当更改 属性 的值时,视图会自动更新以反映预期的更改。然而,大多数时候它并没有持续 UserDefaults
。我觉得我在这里错过了一些东西的想法很愚蠢。还有其他人看到了吗?
步骤:
- 启动应用程序
- 更改值
- 终止并重新启动应用程序
- 将值更改为其他值
- 终止并重新启动应用程序
环境:
- Xcode13.4 (13F17a)
- iOS 15.5 - iPhone 13 专业模拟器
非常简单的例子:
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"
}
}
}
}
}
这种典型情况可能发生在开发阶段,但不会发生在生产阶段,因为用户没有像 Xcode 和 UserDefault class 这样的停止按钮,在应用程序被系统终止之前将更改写入磁盘.
所以我们知道用户的默认数据库是异步写入磁盘的,所以当我们从 Xcode 上的停止按钮停止应用程序时,我们对默认所做的更改可能不会写入数据库,您可以通过滑动停止应用程序自己尝试,您的数据将在下次启动时存储,但是当您从 Xcode 停止时,您的数据将不会被保存