Swift 数据采集器格式错误
但是当我运行应用程序时,它返回这个错误 无法将类型为“\uu NSCFString”(0x108e8b4f0)的值强制转换为“NSDate”(0x108e8c0d0)Swift 数据采集器格式错误,swift,nsuserdefaults,datapicker,Swift,Nsuserdefaults,Datapicker,但是当我运行应用程序时,它返回这个错误 无法将类型为“\uu NSCFString”(0x108e8b4f0)的值强制转换为“NSDate”(0x108e8c0d0) 我转换为HH:mm是因为我只想用这种格式记录时间,但我不知道如何处理它您应该将日期对象本身存储在UserDefaults中,而不是它的字符串表示形式中。在大多数用例中,存储Date对象更有意义,因为Date对象表示一个绝对时间点,因此您可以使用它们进行日期比较或将其转换为本地时间 此外,setDate函数实际上需要一个Date对象
我转换为HH:mm是因为我只想用这种格式记录时间,但我不知道如何处理它您应该将日期对象本身存储在
UserDefaults
中,而不是它的字符串表示形式中。在大多数用例中,存储Date
对象更有意义,因为Date
对象表示一个绝对时间点,因此您可以使用它们进行日期比较或将其转换为本地时间
此外,setDate
函数实际上需要一个Date
对象,而不是字符串,因此生成日期的字符串表示,然后将其存储在UserDefaults
中是没有意义的
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)
您是否将字符串值保存在
UserDefaults
中,并尝试从字符串设置NSDate
。如果您只关心时间,那么我建议您将日期保存在UserDefaults
中,并根据您的要求将time
格式化
以下是保存和检索时间的步骤:
//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)
}
func datePickerChanged(_ sender: UIDatePicker){
UserDefaults.standard.set(sender.date, forKey: "date")
}
用于保存:
//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)
}
func datePickerChanged(_ sender: UIDatePicker){
UserDefaults.standard.set(sender.date, forKey: "date")
}
用于检索:
//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)
}
func datePickerChanged(_ sender: UIDatePicker){
UserDefaults.standard.set(sender.date, forKey: "date")
}
希望它能帮助你,节省你的时间 您将日期存储为
UserDefaults
中的String
,因此您将其返回为类型“\uu NSCFString”而不是“NSDate”,并且无法将其强制转换为date
。现在还不清楚你将要完成什么。为什么要费心于所有的日期字符串转换呢?只需存储实际的日期
,并避免所有转换。@rmaddy是的,转换时间很长,但我已更新了答案。非常感谢。