如何使用 UserDefaults 从 UIDatePicker 存储?
How can I use UserDefaults to store from UIDatePicker?
我是编程新手 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)
}
由于Date
不符合NSCoding
,不能直接存入用户默认值。您需要将其转换为 "property list type"(这意味着您可以在 属性 列表、Int
、Double
、String
、Dictionary
等)。在这种情况下,您会将 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"))
我是编程新手 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)
}
由于Date
不符合NSCoding
,不能直接存入用户默认值。您需要将其转换为 "property list type"(这意味着您可以在 属性 列表、Int
、Double
、String
、Dictionary
等)。在这种情况下,您会将 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"))