Ios 我的用户默认值不保存我的滑块值-Swift 3
我正在创建一个Pomotoro计时器应用程序,目前我正在尝试在幻灯片菜单(设置类)中实现用户默认设置,该菜单负责包含用于调整计时器长度的UI滑块。在我看来,用户默认值非常正确,但每当我在模拟器中关闭应用程序并重新打开它时,该值都不会保存?滑块和标签都返回其默认值。我做错了什么Ios 我的用户默认值不保存我的滑块值-Swift 3,ios,swift,swift3,nsuserdefaults,uislider,Ios,Swift,Swift3,Nsuserdefaults,Uislider,我正在创建一个Pomotoro计时器应用程序,目前我正在尝试在幻灯片菜单(设置类)中实现用户默认设置,该菜单负责包含用于调整计时器长度的UI滑块。在我看来,用户默认值非常正确,但每当我在模拟器中关闭应用程序并重新打开它时,该值都不会保存?滑块和标签都返回其默认值。我做错了什么 import Foundation import UIKit class Settings: UIView { let defaults = UserDefaults.standard let durationSli
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)
}
您应该使用适当的方法对
UserDefaults
您正在使用defaults.set(sender.value,forKey:durationSlide)
保存值,它正在UserDefaults
中保存一个Float
但是您尝试读取值时使用了错误的方法。您使用的是value(forKey:)
,它不是UserDefaults
的方法。它是从键值编码扩展到NSObject
(其中UserDefaults
扩展)。相反,请使用:
durationSlide = defaults.float(forKey: durationSlide)
如果
UserDefaults
中没有值,则这将给出0
的值。使用defaults.float(forKey:durationSlide)
您的设置
类实现为UIView
,而不是UIViewController
。因此,不会自动调用其方法viewDidLoad()
。在实例化设置时显式调用它,或定义设置的初始值设定项,并从初始值设定项内部调用viewDidLoad()
(名称应更改…)。