-1
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 因为我只想以这种格式记录时间,但我不知道我将如何处理它

4

2 回答 2

1

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

此外,看起来该setDate函数实际上需要一个Date对象而不是字符串,因此生成 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)
}
于 2017-09-19T16:48:20.603 回答
1

安德烈你保存字符串值UserDefaults并尝试NSDate从字符串中设置。如果您只关心时间,那么我的建议是保存日期UserDefaultstime按照您的要求进行格式化。

以下是保存和检索时间的以下步骤:

为了节省:

   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)

}

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

于 2017-09-19T16:54:27.730 回答