重新运行 app后在UIDatePicker中显示保存的时间
Display saved time in UIDatePicker after re-run app
我可以通过UIDatePicker设置通知的时间。但是如果我关闭应用程序并再次 运行 ,那么时间将重置为当前时间。尽管通知本身会在先前规定的时间内出现。如何在我之前保存的 UIDatePicker(timeDatePicker 和 timeDatePickerSecond)中显示时间(点击 Schedule 后)?
import UIKit
import UserNotifications
class Notifications: UIViewController, UNUserNotificationCenterDelegate {
@IBOutlet weak var scheludeMeal: UIButton!
@IBOutlet weak var timeDatePicker: UIDatePicker!
@IBOutlet weak var timeDatePickerSecond: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Yes!")
} else {
print("No...?")
}
}
}
@IBAction func scheludeButton(_ sender: Any) {
let center = UNUserNotificationCenter.current()
center.removeAllPendingNotificationRequests()
let content = UNMutableNotificationContent()
content.title = "Notification!"
content.body = "Description of notification :)"
content.sound = UNNotificationSound.default
let dateComponent = timeDatePicker.calendar.dateComponents([.hour, .minute], from: timeDatePicker.date)
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponent, repeats: true)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)
let dateComponentSd = timeDatePickerSecond.calendar.dateComponents([.hour, .minute], from: timeDatePickerSecond.date)
let trigger2 = UNCalendarNotificationTrigger(dateMatching: dateComponentSd, repeats: true)
let request2 = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger2)
center.add(request2)
}
}
您可以使用 UserDefaults
在应用程序启动之间保留 Date
对象。您只需要确保将新选择的 Date
对象保存在 scheduleButton
中,并将 UserDefaults
中的值加载到 viewDidLoad
中以设置为默认日期选择器。
您可以找到针对 timeDatePicker
实施的所述解决方案,但如果您还需要针对 timeDatePickerSecond
实施的解决方案,只需为此创建另一个 Date?
属性 并实施它同样,但请确保在第二个 属性.
中使用不同的 UserDefaults
键
import UIKit
import UserNotifications
class Notifications: UIViewController, UNUserNotificationCenterDelegate {
@IBOutlet weak var scheludeMeal: UIButton!
@IBOutlet weak var timeDatePicker: UIDatePicker!
@IBOutlet weak var timeDatePickerSecond: UIDatePicker!
var savedNotificationDate: Date? {
get {
return UserDefaults.standard.object(forKey: "notificationDate") as? Date
}
set {
UserDefaults.standard.set(newValue, forKey: "notificationDate")
}
}
override func viewDidLoad() {
super.viewDidLoad()
if let savedNotificationDate = savedNotificationDate {
timeDatePicker.date = savedNotificationDate
}
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Yes!")
} else {
print("No...?")
}
}
}
@IBAction func scheludeButton(_ sender: Any) {
let center = UNUserNotificationCenter.current()
center.removeAllPendingNotificationRequests()
let content = UNMutableNotificationContent()
content.title = "Notification!"
content.body = "Description of notification :)"
content.sound = UNNotificationSound.default
let dateComponent = timeDatePicker.calendar.dateComponents([.hour, .minute], from: timeDatePicker.date)
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponent, repeats: true)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)
savedNotificationDate = timeDatePicker.date
let dateComponentSd = timeDatePickerSecond.calendar.dateComponents([.hour, .minute], from: timeDatePickerSecond.date)
let trigger2 = UNCalendarNotificationTrigger(dateMatching: dateComponentSd, repeats: true)
let request2 = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger2)
center.add(request2)
}
}
我可以通过UIDatePicker设置通知的时间。但是如果我关闭应用程序并再次 运行 ,那么时间将重置为当前时间。尽管通知本身会在先前规定的时间内出现。如何在我之前保存的 UIDatePicker(timeDatePicker 和 timeDatePickerSecond)中显示时间(点击 Schedule 后)?
import UIKit
import UserNotifications
class Notifications: UIViewController, UNUserNotificationCenterDelegate {
@IBOutlet weak var scheludeMeal: UIButton!
@IBOutlet weak var timeDatePicker: UIDatePicker!
@IBOutlet weak var timeDatePickerSecond: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Yes!")
} else {
print("No...?")
}
}
}
@IBAction func scheludeButton(_ sender: Any) {
let center = UNUserNotificationCenter.current()
center.removeAllPendingNotificationRequests()
let content = UNMutableNotificationContent()
content.title = "Notification!"
content.body = "Description of notification :)"
content.sound = UNNotificationSound.default
let dateComponent = timeDatePicker.calendar.dateComponents([.hour, .minute], from: timeDatePicker.date)
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponent, repeats: true)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)
let dateComponentSd = timeDatePickerSecond.calendar.dateComponents([.hour, .minute], from: timeDatePickerSecond.date)
let trigger2 = UNCalendarNotificationTrigger(dateMatching: dateComponentSd, repeats: true)
let request2 = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger2)
center.add(request2)
}
}
您可以使用 UserDefaults
在应用程序启动之间保留 Date
对象。您只需要确保将新选择的 Date
对象保存在 scheduleButton
中,并将 UserDefaults
中的值加载到 viewDidLoad
中以设置为默认日期选择器。
您可以找到针对 timeDatePicker
实施的所述解决方案,但如果您还需要针对 timeDatePickerSecond
实施的解决方案,只需为此创建另一个 Date?
属性 并实施它同样,但请确保在第二个 属性.
UserDefaults
键
import UIKit
import UserNotifications
class Notifications: UIViewController, UNUserNotificationCenterDelegate {
@IBOutlet weak var scheludeMeal: UIButton!
@IBOutlet weak var timeDatePicker: UIDatePicker!
@IBOutlet weak var timeDatePickerSecond: UIDatePicker!
var savedNotificationDate: Date? {
get {
return UserDefaults.standard.object(forKey: "notificationDate") as? Date
}
set {
UserDefaults.standard.set(newValue, forKey: "notificationDate")
}
}
override func viewDidLoad() {
super.viewDidLoad()
if let savedNotificationDate = savedNotificationDate {
timeDatePicker.date = savedNotificationDate
}
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Yes!")
} else {
print("No...?")
}
}
}
@IBAction func scheludeButton(_ sender: Any) {
let center = UNUserNotificationCenter.current()
center.removeAllPendingNotificationRequests()
let content = UNMutableNotificationContent()
content.title = "Notification!"
content.body = "Description of notification :)"
content.sound = UNNotificationSound.default
let dateComponent = timeDatePicker.calendar.dateComponents([.hour, .minute], from: timeDatePicker.date)
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponent, repeats: true)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)
savedNotificationDate = timeDatePicker.date
let dateComponentSd = timeDatePickerSecond.calendar.dateComponents([.hour, .minute], from: timeDatePickerSecond.date)
let trigger2 = UNCalendarNotificationTrigger(dateMatching: dateComponentSd, repeats: true)
let request2 = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger2)
center.add(request2)
}
}