Установка UserNotification с датой из базы данных swift - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь создать уведомление на основе даты и времени, указанных пользователем для приложения, над которым я работаю. Я могу сохранить дату пользователя и получить. Теперь я хочу, чтобы уведомление появлялось, когда указанная пользователем дата прибыла, как напоминание. Я могу создать уведомление с жестко закодированными значениями, но теперь я не могу выполнить извлечение из базы данных Real для передачи в значение триггера. мои коды указаны ниже

func notifcation() -> Void {

        let calendar = Calendar.current
        let components = DateComponents(year: 2018, month: 09, day: 08, hour: 18, minute: 55) // Set the date here when you want Notification
        let date = calendar.date(from: components)
        let comp2 = calendar.dateComponents([.year,.month,.day,.hour,.minute], from: date!)
        let trigger = UNCalendarNotificationTrigger(dateMatching: comp2, repeats: true)
        let content = UNMutableNotificationContent()
        content.title = "Don't forget"
        content.body = "Buy some milk"
        content.sound = UNNotificationSound.default()
        let identifier = "UYLLocalNotification"
        let request = UNNotificationRequest(identifier: identifier,
                                            content: content, trigger: trigger)

        center.add(request, withCompletionHandler: { (error) in
            if let error = error {
                // Something went wrong
                print(error as Any)
            }
        })
    }

тогда я вызываю уведомления () в моем viewDidLoad

Модель

class ListModel: Object {
    @objc dynamic var createdDate: Date?
    @objc dynamic var remiderDate: Date?
}

на основании ответа Sh Моя функция

func getDataFromDB() -> Results<ListModel>? {
        let todoListArray: Results<ListModel> = database.objects(ListModel.self)
        return todoListArray
    }

мой viewdidLoad был теперь

TodoListFunctions.instance.getDataFromDB()?.forEach({ (list) in

            notifcation(list.remiderDate)
        })

в моем AppDelegate для разрешения

let center = UNUserNotificationCenter.current()
        let options: UNAuthorizationOptions = [.alert, .sound]

        center.requestAuthorization(options: options) {
            (granted, error) in
            if !granted {
                print("Something went wrong")
            }
        }

другие коды будут предоставлены по запросу

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете попробовать

let allList = self.database.objects(ListModel.self)
allList.forEach{ notifcation($0.remiderDate) }

//

func notifcation(_ reminder:Date?) -> Void { 

        guard let date = reminder else { return }
        let comp2 = calendar.dateComponents([.year,.month,.day,.hour,.minute], from: date)
        let trigger = UNCalendarNotificationTrigger(dateMatching: comp2, repeats: true)
        let content = UNMutableNotificationContent()
        content.title = "Don't forget"
        content.body = "Buy some milk"
        content.sound = UNNotificationSound.default()
        let identifier = "\(date)"  // identider should be different for each one 
        let request = UNNotificationRequest(identifier: identifier,
                                            content: content, trigger: trigger)

        center.add(request, withCompletionHandler: { (error) in
            if let error = error {
                // Something went wrong
                print(error as Any)
            }
        })
    }

//

Установить делегата внутри AppDelegte

UNUserNotificationCenter.current().delegate = self

и обратите внимание на отпечаток

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler([.alert, .sound])
}

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
  print("notification received")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...