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

使用UserDefaults保存UISwitch状态异常:返回后状态未正确恢复

解决UISwitch状态无法通过UserDefaults保存的问题

嘿,我一眼就发现你代码里的关键问题啦!

核心问题:方法名拼写错误

你写的viewWillDesappear是错的!正确的方法名是**viewWillDisappear**(注意是双s的Disappear)。方法名拼写错误的话,系统根本不会调用这个方法,所以你离开视图时,开关的状态根本没被保存到UserDefaults里,返回自然读不到正确的值。

另外两个需要注意的细节

  • 重写ViewController的生命周期方法时,一定要先调用super方法,这是规范操作,避免干扰系统的默认逻辑。
  • 虽然iOS 10之后UserDefaults会自动同步,但如果想确保状态立刻被持久化,可以在set之后调用synchronize()(可选,但能避免极端情况下的同步延迟)。

修正后的完整代码

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let userDefaults = UserDefaults.standard
    mySwitch.setOn(userDefaults.bool(forKey: "mySwitchValue"), animated: true)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UserDefaults.standard.set(mySwitch.isOn, forKey: "mySwitchValue")
    // 可选:确保状态立刻同步到磁盘
    UserDefaults.standard.synchronize()
}

这样修改后,你离开视图时开关状态会被正确保存,返回时也能恢复之前的状态啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:00:09