Отображение сохраненного времени в UIDatePicker после перезапуска приложения - PullRequest
0 голосов
/ 27 ноября 2018

Я могу установить время для уведомлений с помощью UIDatePicker.Но если я закрою приложение и запустлю снова, то время будет сброшено к текущему.Хотя сами уведомления появятся в заранее установленное время.Как сделать отображаемое время в UIDatePicker (timeDatePicker и timeDatePickerSecond), которое я сохранил ранее (после нажатия кнопки «Расписание»)?

enter image description here

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)

    }

}

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете использовать 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)

    }

}
...