DataPicker格式错误

时间:2017-09-19 15:55:17

标签: swift nsuserdefaults 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' (0x108e8b4f0)到' NSDate' (0x108e8c0d0)。

我转换为HH:mm因为我想只记录这种格式的时间,但我不知道我将如何处理它

2 个答案:

答案 0 :(得分:5)

Andre你在UserDefaults中保存String值并尝试从String设置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)

}

希望它能帮到你,节省你的时间。

答案 1 :(得分:1)

您应该将Date对象本身存储在UserDefaults而不是其String表示中。在大多数用例中,存储Date对象更有意义,因为Date个对象代表绝对时间点,因此您可以将它们用于日期比较或将它们转换为本地时间。 / p>

此外,看起来setDate函数实际上需要一个Date对象而不是一个String,因此生成一个Date的String表示然后存储它是没有意义的。 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)
}