将datepicker保存到userdefaults并在加载时设置值

时间:2018-01-07 00:32:46

标签: swift nsuserdefaults uidatepicker

尝试在更改为UserDefaults时保存datePicker日期,并在此UserDefaults存在时设置datePicker日期。

我做过研究,但我发现的所有东西看起来都很旧,而且还没有工作。

我似乎遇到了从保存的UserDefaults设置日期的问题。我很确定我做错了。我刚刚学习Xcode / Swift,所以如果这很明显,我会道歉。

保存日期:

@IBOutlet weak var NotificationTime: UIDatePicker!
let notificationTimeKey = "notificationTime"

override func viewDidLoad(){
    super.viewDidLoad()

    //Not sure how to set the date
    if let dateValue = defaults.value(forKey: notificationTimeKey){
        NotificationTime.date = dateValue as! NSDate <--- Cannot assign value of type 'NSDate?' to type 'Date'
    }
}  

@IBAction func updateNotificationTime(_ sender: Any){
    let selectedDate = NotificationTime.date
    UserDefaults().set(selectedDate, forKey: notificationTimeKey)
}

2 个答案:

答案 0 :(得分:1)

您从UserDefaults读取日期并设置日期选择器date的代码应为:

if let dateValue = defaults.object(forKey: notificationTimeKey) as? Date {
    NotificationTime.date = dateValue
}

除非您有清楚明了的理由使用键值编码,否则请勿使用value(forKey:)

并且不要在Swift中使用NSDate

此外,变量和方法名称应以小写字母开头。您应该为您的插座notificationTime命名。类和结构名称以大写字母开头。

答案 1 :(得分:0)

我从'chriswaco'https://www.reddit.com/r/Xcode/comments/faxfa8/how_do_you_save_a_date_form_a_date_picker/

的Redit中找到了与上述代码相似的另一个答案。

可在iOS 14和Xcode 12中使用。

保存:(将其放入DatePicker操作功能中)

 let theDate = datePicker.date
 UserDefaults.standard.set( theDate, forKey:"myDateKey")

回读,即(ViewDidLoad)

 if let savedDate = UserDefaults.standard.object(forKey:"myDateKey") as? Date{
    // do something with savedDate here
 }

在Redit中为chriswaco提供信用。