我是编程和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)
}
答案 0 :(得分:0)
由于Date
不符合NSCoding
,因此您无法直接将其存储在用户默认值中。您需要将其转换为“属性列表类型”(这意味着您可以在属性列表中存储的内容类型,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"))