DataPicker格式错误


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)
}

希望它能帮助您并节省您的时间。

最新更新