如何使用UserDefaults来存储UIDatePicker?

时间:2016-10-26 19:03:29

标签: ios swift nsuserdefaults uidatepicker ibaction

我是编程和Swift的新手。我正在构建的应用程序很简单,我想添加一个简单的本地通知,由用户设置的UIDatePicker触发。我已设法设置通知,但我跪下试图了解每次重新启动应用程序时如何防止UIDatePicker重置。这是相关代码(没有AppDelegate.swift中的内容):

 @IBAction func datePicker(_ sender: UIDatePicker) {

    let selectedDate = sender.date
    let delegate = UIApplication.shared.delegate as? AppDelegate
    delegate?.scheduleNotification(at: selectedDate)

}

1 个答案:

答案 0 :(得分:0)

由于Date不符合NSCoding,因此您无法直接将其存储在用户默认值中。您需要将其转换为“属性列表类型”(这意味着您可以在属性列表中存储的内容类型,IntDoubleStringDictionary等等)。在这种情况下,您会将Date转换为Double

let selectedDate = sender.date
let timeSince1970 = selectedDate.timeIntervalSince1970
// now we have the double value, we can store it in user defaults! :)
UserDefaults.standard.set(timeSince1970, forKey: "myDate")

编辑:

糟糕!看起来我错了,你可以直接在用户默认值中存储Date

UserDefaults.standard.set(selectedDate, forKey: "myDate")

要取回存储日期并将其设置为日期选择器的选定日期,只需在viewDidLoad中执行此操作:

let selectedDate = UserDefaults.standard.object(forKey: "myDate") as? Date
myDatePickerOutlet.setDate(selectedDate ?? Date(), animated: false)

如果您将Double存储为日期,则可以按如下方式检索:

let selectedDate = Date(
    timeIntervalSince1970: UserDefaults.standard.double(forKey: "myDate"))