请教: AppStorage 的设置,怎么重置 ?

2021-02-04 13:48:41 +08:00
 ericgui
我在 AppStorage 里,有一个变量,值为 true,第一次点击按钮之后,就变为 false

结果每次重新 build 之后,这个值就永远为 false 了

目前只好在 emulator 里,把 app 删了,重新 run 一下

有什么办法仅仅重置 AppStorage 而不用删 app ? 谢谢
2740 次点击
所在节点    iDev
6 条回复
AllenChiangCN
2021-02-04 14:04:19 +08:00
进 app info,然后 clear storage
AllenChiangCN
2021-02-04 14:04:57 +08:00
@AllenChiangCN 不好意思,你好像说的是 iOS
ericgui
2021-02-04 14:07:31 +08:00
@AllenChiangCN 是 iOS,不好意思没说清楚
JasonEWNL
2021-02-05 00:28:28 +08:00
标记为 AppStorage 的变量本地存着, run 之后就像常规覆盖安装后持续保存的用户数据一样.

方案一: 设置为 State, 小量可在打包前手动改回, 如果比较重度建议设置预处理语句.

```swift
#if DEBUG
@State ...
#else
@AppStorage ...
#endif
```

方案二: 参考 Stack Overflow 的一个个曲线方案 (针对模拟器的在评论里): https://stackoverflow.com/questions/15258777/xcode-delete-application-before-running-on-device#answer-32992734

简单解释就是把 `xcrun simctl uninstall sim-udid bundle-id` 放在 build 脚本里, 每次 build 会先删掉应用.
ericgui
2021-02-05 01:26:11 +08:00
@JasonEWNL 谢谢
也就是说,其实没办法避免删除 app 这个步骤。。。。无非是手动还是用脚本命令
JasonEWNL
2021-02-05 12:11:20 +08:00
@ericgui 是的. 因为不删除地在 Xcode 里 run 一次, 就像用户不删除应用就从 App Store 更新一样, 标记为 AppStorage 的变量存储在 UserDefaults 里, 如其他永久存储方案一样, 仅能通过用户操作 (包括删除在内) 才能修改或重置.

不过这么一说就想到方案三: 给标记为 AppStorage 的变量所在 View 的 body 设置 onAppear, 类似方案一地进行预处理.

```swift
@AppStorage ...

var body: some View {
...
}
.onAppear {
#if DEBUG
... = DEBUG_VALUE
#endif
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/751227

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX