我的用户默认值没有保存我的滑块值 - Swift 3
Posted
技术标签:
【中文标题】我的用户默认值没有保存我的滑块值 - Swift 3【英文标题】:My user defaults are not saving my slider value - Swift 3 【发布时间】:2017-02-04 02:27:42 【问题描述】:我正在创建一个番茄钟计时器应用程序,我目前正在尝试在上滑菜单(设置类)中实现用户默认值,该菜单负责包含用于调整计时器长度的 uislider。用户默认值对我来说看起来很正确,但是每当我在模拟器中关闭应用程序并重新打开它时,值不会保存?滑块和标签都返回到它们的默认值。我做错了什么?
import Foundation
import UIKit
class Settings: UIView
let defaults = UserDefaults.standard
let durationSlide = "durationSlide"
@IBOutlet weak var durationSlider: UISlider!
@IBOutlet weak var durationLabel: UILabel!
func viewDidLoad()
if let durationSlide = defaults.value(forKey: durationSlide)
durationSlider.value = durationSlide as! Float
durationSliderValueChanged(durationSlider)
@IBAction func durationSliderValueChanged(_ sender: UISlider)
let currentValue = Int(sender.value)
durationLabel.text = "\(currentValue) minutes"
defaults.set(sender.value, forKey: durationSlide)
【问题讨论】:
使用defaults.float(forKey: durationSlide)
您的Settings
类实现为UIView
,而不是UIViewController
。因此,它的方法viewDidLoad()
不会自动调用。当您实例化 Settings
时显式调用它,或者定义 Settings
的初始化程序并从初始化程序内部调用 viewDidLoad()
(名称应该更改...)。
【参考方案1】:
您应该使用正确的方法对来设置和获取UserDefaults
中的值
您正在使用 defaults.set(sender.value, forKey: durationSlide)
保存值,这是在 UserDefaults
中保存 Float
。
但是您尝试读取该值时使用了错误的方法。您正在使用value(forKey:)
,这不是UserDefaults
的方法。它从键值编码扩展到NSObject
(UserDefaults
扩展)。相反,使用:
durationSlide = defaults.float(forKey: durationSlide)
如果UserDefaults
中没有值,这将给出0
的值。
【讨论】:
以上是关于我的用户默认值没有保存我的滑块值 - Swift 3的主要内容,如果未能解决你的问题,请参考以下文章