let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm "
let selectedDate = dateFormatter.string(from: sender.date)
UserDefaults.standard.set(selectedDate, forKey: "date")
print(selectedDate)
\method to reload the selected time inside the viewdidLoad func
let selectedDate = UserDefaults.standard.object(forKey: "date")
example.setDate(selectedDate as! Date ?? Date(), animated: false)
但是当我运行应用程序时,它会返回此错误
无法将" __nscfstring"类型的价值投射为'nsdate'(0x108e8e8c0d0)。
我转换为HH:MM,因为我只想以这种格式记录时间,但是我不知道该如何处理
您应该将日期对象本身存储在UserDefaults
中,而不是其字符串表示中。在大多数用例中,存储Date
对象更有意义,因为Date
对象表示绝对的时间点,因此您可以将它们用于日期比较或将其转换为当地时代。
此外,看起来setDate
函数实际上期望Date
对象而不是字符串,因此生成日期的字符串表示,然后将其存储在UserDefaults
中。
//Save the Date object
UserDefaults.standard.set(sender.date, forKey: "date")
//Retrieve the Date object, if it cannot be retrieved, use the current Date
if let selectedDate = UserDefaults.standard.object(forKey: "date") as? Date {
example.setDate(selectedDate, animated: false)
} else {
example.setDate(Date(), animated: false)
}
andre您将字符串值保存在UserDefaults
中,然后尝试从字符串设置NSDate
。如果您仅关注时间,那么我的建议是保存日期,因为它在UserDefaults
中,并按照您的要求将time
的格式化为格式。
这是节省和检索时间的以下步骤:
用于保存:
func datePickerChanged(_ sender: UIDatePicker){
UserDefaults.standard.set(sender.date, forKey: "date")
}
用于检索:
func getTime(){
let date = UserDefaults.standard.object(forKey: "date") as! Date
let dateFormatter = DateFormatter()
dateFormatter.locale = NSLocale.current
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone! //Set your own time zone here.
dateFormatter.dateFormat = "HH:mm"
print(dateFormatter.string(from: date as Date))
example.setDate(date, animated: false)
}
希望它能帮助您并节省您的时间。